我正在参加「掘金·启航计划」
git merge 与 git rebase
rebase 是将当前分支的 commit 移到别的分支上「去」,而 merge 则是把别的 commit 合并过「来」
rebase的意思是,给当前分支新的commit序列重新设置基础点。展开来说就是,把你指定的commit以及它所在的commit串,以指定的目标commit为基础,依次重新提交一次。
下图是merge操作的结果
git checkout master
git merge branch1
命令解释:
- 切换
master分支,HEAD指向master分支 branch1提交的5和6会变成7作为master的新的commit
下图是rebase的操作结果
git checkout branch1
git rebase master
命令解释:
- 切换
branch1分支 branch1的5和6会直接追加到master分支上变成7和8,HEAD指向master分支
commit --amend 与 reabse -i / rebase --interactive(修改最近提交注释 与 修改倒数N个提交注释)
^和~的区别:
- ~2表示沿着commit树向上搜索两层,并获得该层的第一个commit(如果该层有多个commit的话)
- ^2表示获得某个commit的第2个父commit(merge两个分支后产生的merge commit就拥有两个父commit)
commit --amend交互式修改(直接在终端操作)最近一条提交注释
rebase -i 更加灵活
通过指定显示最近多个提交如:git rebase -i HEAD~2显示两个提交
会看到提交前面有命令是pick:表示保留这条提交。
比--amend更强大的地方:
- pick:更改提交顺序、删除提交(直接在终端编辑、或删除整行)
wq保存退出 - record:可以修改提交注释,将
pick改为record,wq保存退出进入注释修改,修改完毕wq保存退出 - edit:可以可以完全添加或更改提交,将
pick改为edit,wq保存退出,此时会看见当前分支多一条下图的东西
- 如果你要修改提交内容,在
6fe之前新增一个提交
运行git add xxx和git commit -m "修改xxx"
接着运行git rebase --continue
- 如果要单纯的修改这次提交内容和消息
运行git add xxx和git commit --amend
接着运行git rebase --continue
关于
git注释修改和分支提交同步就说到这里了。大家可以使用一个空项目自己练习。