git命令之merge与rebase

154 阅读2分钟

我正在参加「掘金·启航计划」

git mergegit rebase

rebase 是将当前分支的 commit 移到别的分支上「去」,而 merge 则是把别的 commit 合并过「来」

rebase的意思是,给当前分支新的commit序列重新设置基础点。展开来说就是,把你指定的commit以及它所在的commit串,以指定的目标commit为基础,依次重新提交一次。

下图是merge操作的结果

image.png

git checkout master 
git merge branch1

命令解释:

  • 切换master分支,HEAD指向master分支
  • branch1提交的56会变成7作为master的新的commit

下图是rebase的操作结果 image.png

git checkout branch1
git rebase master

命令解释:

  • 切换branch1分支
  • branch1的5和6会直接追加到master分支上变成78HEAD指向master分支

commit --amendreabse -i / rebase --interactive(修改最近提交注释 与 修改倒数N个提交注释)

^~的区别:

  • ~2表示沿着commit树向上搜索两层,并获得该层的第一个commit(如果该层有多个commit的话)
  • ^2表示获得某个commit的第2个父commit(merge两个分支后产生的merge commit就拥有两个父commit)

image.png

  • commit --amend 交互式修改(直接在终端操作)最近一条提交注释
rebase -i 更加灵活

通过指定显示最近多个提交如:git rebase -i HEAD~2显示两个提交 会看到提交前面有命令是pick:表示保留这条提交。 image.png

比--amend更强大的地方:

  • pick:更改提交顺序、删除提交(直接在终端编辑、或删除整行)wq保存退出
  • record:可以修改提交注释,将pick改为record,wq保存退出进入注释修改,修改完毕wq保存退出
  • edit:可以可以完全添加或更改提交,将pick改为edit,wq保存退出,此时会看见当前分支多一条下图的东西

image.png

  1. 如果你要修改提交内容,在6fe之前新增一个提交

运行git add xxxgit commit -m "修改xxx"

接着运行git rebase --continue

  1. 如果要单纯的修改这次提交内容和消息

运行git add xxxgit commit --amend

接着运行git rebase --continue

关于git注释修改和分支提交同步就说到这里了。大家可以使用一个空项目自己练习。