繁体   English   中英

恢复后如何在保留提交信息的同时提交相同的提交?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM