問題

在我的主分支中,我在本地做了一個git merge some-other-branch,但從未將更改推送到原始主人.我沒有意味著合併,所以我想撤銷它.在我合併後做git status時,我收到此訊息:

 # On branch master
# Your branch is ahead of 'origin/master' by 4 commits.
 

根據一些指令我發現,我嘗試執行

 git revert HEAD -m 1
 

但現在我用git status收到此訊息:

 # On branch master
# Your branch is ahead of 'origin/master' by 5 commits.
 

我不希望我的分支得到任何數量的提交.如何回到這一點?

  最佳答案

使用git reflog檢查哪個提交是合併之前的一個(git reflog將是比git log更好的選項).然後您可以使用以下方法重置它:

 git reset --hard commit_sha
 

還有另一種方法:

 git reset --hard HEAD~1
 

它會讓你回到1個提交。

請注意,任何修改和未提交/未提交的檔案將被重置為未修改的狀態.為了保持它們的stash更改或見下面的--merge選項.


正如@Velmont在他的答案中建議的那樣,在這種直接情況下使用:

 git reset --hard ORIG_HEAD
 

可能會產生更好的結果,因為它應該保留您的更改. ORIG_HEAD將在合併發生之前直接指向提交,所以您不必自己尋找它.


另一個提示是使用--merge切換而不是--hard,因為它不會不必要地重置檔案:

 git reset --merge ORIG_HEAD
 

–merge

重置索引並更新工作樹中與 和 HEAD 不同的檔案,但保留索引和工作樹之間不同的檔案(即沒有新增的更改)。

  相同標籤的其他問題

gitundogit-merge