[英]How to commit the same commits after reverting, while preserving commit information?
假设我执行以下操作:
git init
touch initial && git add initial && git commit -m "Initial commit"
git checkout -b A
touch test_1 && git add . && git commit -m "Commiting test 1" NORMAL
touch test_2 && git add . && git commit -m "Commiting test 2" NORMAL
git checkout master
git merge --no-ff A
git revert -m 1 head
现在,在还原了那些提交之后,发生了一些变化,我决定我再次想要那些提交。
我不能再次进行git merge A
,因为这些提交已经在分支中。
我不想做git revert head
因为当有人运行git blame
,他们会看到Revert "Revert "Merge branch 'A'""
这不是特别有用。 所以我想保留原始提交的提交消息/正文。
我的技巧是在A
上运行git rebase并稍微修改第一次提交的消息,以便更新提交的哈希值,然后我可以再次合并,但是必须有一种更好的方法来完成同一件事。
您可以还原还原:
git revert <commit sha of the revert>
另一种选择是选择两次提交之间的区别:
git cherry-pick master...dev
最后,您还可以将diff放入patch中,然后应用它:
git diff commit1 commit2 > some.patch
git apply some.patch
还原还原远比在脚下突然改变而无需通过还原进行解释要有用得多。
记得:
revert
保留提交信息,并有效地创建了一个反向修补程序,这就是Git看到合并分支并拒绝再次合并它的原因,直到还原了还原。
rebase
将删除历史记录。 除非有必要,否则您不想删除历史记录。
确实,通过一系列还原-还原操作是令人讨厌的。
(更糟糕的是,在一次冲刺期间,我认为经过了一段代码路径,总共经历了六个还原级别。幸运的是,该路径位于不打算发布的分支上。)
默认情况下,还原记录了它还原的提交的哈希ID,因此您可以简单地显式地挑选原始提交(也可以编辑消息以指出它在还原后将被重新导入)。 甚至可以通过提供-m
参数来完成合并,尽管这里偶尔会出现边缘情况(因此请谨慎对待结果)。
另一种方法(更安全一些)还原合并的还原,但是然后编辑提交消息以放入更多信息。 您可以在git revert
命令中使用-e
/ --edit
(仍然是默认值),或者git commit --amend
revert-of-reversion提交,以使用改进的提交消息将其复制到新的和改进的提交中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.