Git-合并commit

1,520 阅读2分钟

Git -- 合并commit

1.git rebase -i

(同 git rebase 中的)

使用 git rebase -i 命令

git rebase -i HEAD~2

执行后跳到一个新界面:

在之前修改commit信息方法中,执行git rebase -i后进入编辑界面前面的值可以为squash,我们将pick改为edit是修改commit信息,改成squash就是合并commit了。

git log

我们把commit:h、g、e合并为一个: 合并的f。

我们执行``后,进入编辑模式,将pick修改为s(squash的缩写)

合并三个,将其中两个改为squash即可

保存退出编辑模式,会进入下面的界面,

默认的合并之后的commit信息就是红框中的内容,可以对它进行编辑,改成我们想要的commit,这里改为:“合并e g h的commit”,再去 git log 查看,e、g、h合并为了一个commit

2. git reset

执行git reset --soft commit_id(commit_id为远程仓库最新的commit_id,一般也是切出此feature分支时的commit_id),之前在工作区的代码依然在工作区,之前提交过的会在暂存区,执行git add(如有需要),执行git commit -m "msg",提交一次commit信息。 原理就相当于,把切分支之后所有的commit,通过reset撤销掉,期间修改的代码会保留在暂存区和工作区,工作区有代码则git add,没有直接git commit

例: 合并commit:e、f、g 为一个新的commit:efg

执行 git reset --soft d7e5d51(d7e5d51为对应commit提交信息为d的commit_id),查看状态可知e、f、g的修改现在都在暂存区

此时git commit -m "efg",通过 git log 查看验证

3. git merge --squash

(gitlab上的squash?) 例:master合并br1分支代码,br1已经有多次commit了。

切换分支到master: git checkout master git merge --squash br1, 此时git status查看可知,之前branch1多次commit的是修改都处在暂存区中 // --squash 会暂停commit提交,要不然一个merge会自动提交commit git commit -m "squash_msg" 通过git log查看

over

综合体验上来讲,方法2更容易理解、使用,推荐 使用 reset --soft 方法