【git】git教程(2)常用命令

git分支管理(当前分支main)

# 基于当前分支创建分支bugFix
git branch bugFix
# 切换到bugFix分支
git checkout bugFix

# 以上两步等同于
git checkout -b bugFix

git分支合并(当前分支main)

# 将bugFix上的提交合并到main分支上
git merge bugFix

【git】git教程(2)常用命令_第1张图片

git分支变基(当前分支main)

git checkout bugfix
git rebase main

【git】git教程(2)常用命令_第2张图片

# 将main分支指向bugfix
git checkout main
# 因为此时的bugfix基于main,所以只是简单的将main指向bugfix
git rebase bugfix

git 分离HEAD

上面我们一直在checkout [分支名], 其实我们还可以checkout [hash]。之所以可以这么做,是因为其实有一个叫做HEAD的指针指向分支名,当我们checkout [hash]时,HEAD将直接指向hash提交节点,我们再进行commit时,HEAD 将移动到最新的提交hash,但之前的分支指针是没有移动的。

git checkout C4
# 做一些内容,然后提交,便形成了下图,可以看到bugFix的指向是没有动的
git commit 

【git】git教程(2)常用命令_第3张图片

# 通过^,不用指定hash,就可以指向bugFix分支所指hash的上一个hash
git checkout bugFix^

# 通过~3,不用指定hash,就可以指向bugFix分支所指hash向上3个所在的hash

【git】git教程(2)常用命令_第4张图片

git 移动分支名到指定节点

# 将main分支强制移动到HEAD的上一个节点
git branch -f main HEAD^
# 将main分支强制移动到HEAD的上3个节点
git branch -f main HEAD~3
# 将main分之强制移动到指定的hash
git branch -f main [hash]

【git】git教程(2)常用命令_第5张图片

git reset 和 git revert

原始的分支如下所示:
【git】git教程(2)常用命令_第6张图片

# 将local回退到main,C3将被丢弃
git reset main

# 撤销C2的提交(适用于远程推送,reset不可用于远程推送)
git checkout pushed
git revert C2

结果为:
【git】git教程(2)常用命令_第7张图片

自由修改git提交树

  • 使用cherry-pick
# 最开始我们的HEAD指向main指向C5,然后使用cherry-pick
git cherry-pick C2 C4
# 则有以下的提交树

【git】git教程(2)常用命令_第8张图片

  • 使用git rebase -i 交互式
# 最近4个提交进行处理
git rebase -i HEAD~4
# 可以对近四个提交进行:调整顺序,删除不想要的提交,合并提交等操作,调整后将形成新的提交

【git】git教程(2)常用命令_第9张图片
以上所有都是在本地进行操作,后续会有操作远程仓库的方法。

你可能感兴趣的:(git,github)