如何在还原后提交相同的提交,同时保留提交信息?

时间:2017-06-21 19:51:23

标签: git

说我做了以下操作:

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'""并不是特别有用。所以我希望保留原始提交的提交消息/主体。

我的hack是在A上运行git rebase并稍微修改第一次提交的消息,因此提交的哈希值会更新,我可以再次合并,但必须有更好的方法来完成同样的事情。

3 个答案:

答案 0 :(得分:0)

您可以恢复还原:

git revert <commit sha of the revert>

另一种选择是在两次提交之间挑选差异:

git cherry-pick master...dev

最后你也可以将diff放入补丁然后应用它:

git diff commit1 commit2 > some.patch
git apply some.patch

答案 1 :(得分:0)

恢复恢复功能远比在脚下突然改变并且没有通过变形解释而提供更多信息。

记住:

  • revert保留提交信息并有效地创建反向补丁,这就是为什么Git会看到合并的分支并拒绝再次合并它,直到还原恢复。

  • rebase 删除历史记录。 除非有必要,否则您不想删除历史记录。

答案 2 :(得分:0)

通过一系列还原 - 还原来绊倒确实是令人讨厌的。

(情况变得更糟,在一次冲刺期间,有一条代码路径,我认为总共有六个级别的恢复,我看到了它。幸运的是,它位于一个不适合发布的分支上。)

默认情况下,revert会记录它还原的提交的哈希ID,因此您可以简单地明确地选择原始提交(并且可能编辑该消息以注意它在被还原后重新导入)。甚至可以通过提供-m参数来进行合并,尽管这里偶尔存在边缘情况(所以要小心结果)。

或者 - 更安全 - 恢复合并的恢复,但随后编辑提交消息以输入更多信息。您可以使用-e / --edit(无论如何是默认值)和git revert命令,或git commit --amend还原提交还原提交将其复制到新的并使用改进的提交消息改进了一个。