2013-09-26 65 views
2

我正在合併master分支到一個子分支,以便我可以將最新的代碼更新到子分支中。Git發出提交併還原

合併後,我意識到我錯過了一些東西,所以我想撤消合併。

我使用的是GitHub for Mac,當時沒有網絡查找如何正確撤消合併。所以我愚蠢地做了合併,希望我能恢復到之前的提交。一切似乎都好。

但是,當我試圖合併master回到子分支,它沒有拿起所有的衝突和變化,就像我第一次合併時。我認爲這是因爲我有那裏舊合併的歷史。

一旦我得到了我的Internet連接後,我尋找,我試圖運行以下命令恢復到提交前的原始合併:

git reset --hard HASH 

這似乎工作。然後我再次嘗試合併master分支,但它仍然沒有采取衝突和變化。當我運行上述命令時,它仍然顯示我認爲會被刪除的提交。

如何在第一次合併之前的提交後永久刪除所有內容?我錯過了什麼嗎?

非常感謝您的幫助。

+0

'git log'爲分支顯示了什麼? – asm

+1

如果將'master'合併到分支中顯示提交,則在重置分支之後,它聽起來像是在重置之前將其合併到主設備中。 – Christopher

回答

0

我解決它下面的方式...也許這是一個ltitle更爲複雜,因爲我用的GitHub的Mac ...

我重置最後提交的哈希值,我想:

git reset --hard <identified-commit-hash> 

我然後創建從支行支行我遇到了問題。當我再次合併master時,這阻止了任何歷史迴歸。

正如我所說這可能是因爲Mac的GitHub無法正常工作,但它對我有用。

1

如果你的分支是從主分割出來的,那麼分支分支可能會更好。 http://git-scm.com/book/en/Git-Branching-Rebasing

git checkout sub-branch 
git rebase master 

如果您支行衝突是由於從主先前的合併,並要撤消,那麼你想恢復。

git revert SHA-1 
0

在這樣的情況下,結合使用resetreflog可能會產生更好的結果到了上次的好承諾也沒留下。這將重新編寫您的工作目錄並將歷史記錄提交到所需的點。

這將需要使用命令行。

  1. 評論什麼樣的變化已作出(的HEAD移動)

    git reflog

  2. 確定在reflog其哈希代表上次的好提交

    的提交哈希或[email protected]{ }值都可用

  3. 重置當前分支的頭部指定的哈希,重寫工作目錄

    git reset --hard <identified-commit-hash>