我在master branch
上有3次提交:
master- 3st commit
master- 2st commit
master- 1st commit
现在我需要对master- 2st commit
进行一些更改。因此,我从dev
中签出了一个名为master- 2st commit
的新分支。
在分支dev
上进行了一些更改之后,我进行了dev- 1st commit
的提交。
我想用master- 2st commit
覆盖dev- 1st commit
。
有什么建议吗?谢谢前进
答案 0 :(得分:0)
如果您不想向a
添加新的提交,则需要重写master
和master- 2nd commit
。
master-3rd commit
历史记录如下:
git checkout master
# rewrite <master- 2nd commit>
git reset <dev- 1st commit> --hard
git reset <master- 2nd commit> --soft
git commit --amend
# rewrite <master- 3rd commit>
git cherry-pick <master- 3rd commit>
答案 1 :(得分:0)
警告:只要未创建git push
,就可以重写git历史记录。之后,您仍然可以做任何您想做的事情,但这需要您避免使用力推。
最好的方法是在以下过程中使用cherry-pick
:
git checkout master~2
git cherry-pick master~1
[make your edits]
git add --all
git commit --amend
git cherry-pick master
git checkout master
git reset --hard HEAD@{1}
说明:
HEAD
放置在master
之前2次提交的提交上。master
之前的1次提交中复制一份提交副本,并将其追加到HEAD
之后。master
位置之后复制HEAD
提交。master
位置。HEAD
的先前位置(即,上次结帐之前的位置:新的“第三次提交”提交)。 Interactive demo (不知道git reset --hard HEAD@{1}
,因此它使用临时分支)。
答案 2 :(得分:0)
Git是一个工具箱,其中有多个工具可以完成相同的工作。我将以这种方式解决这个问题-
在主服务器上的master- 3rd commit
的帮助下,注意提交git log -1 --oneline
的提交ID。
步骤:
git Checkout master
git reset --hard HEAD~2
git cherry-pick <dev- 1st commit>
git cherry-pick <master- 3rd commit>
说明:
假设master上有3个提交,git reset --hard HEAD~2
将从第1个提交中分离出前两个提交[3rd和2nd],分支master现在指向第1个提交。
git cherry-pick <dev- 1st commit>
将向dev添加与dev-1st提交相同的新提交,分支master现在指向新的dev提交。
git cherry-pick <master- 3rd commit>
将再次在dev commit的基础上添加一个新的commit,现在,历史记录类似于-
master- new 3rd commit
dev - new 1st commit
master- old 1st commit