簡體   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