簡體   English   中英

pull而不是fetch - 意外地將遠程master合並到本地分支

[英]pull instead of fetch - accidentally merged remote master into local branch

我只是做了git pull而不是git fetch 我在一個本地分支機構,我不想與origin/master合並。 而且,我有一些不明朗的變化。

現在我的暫存區域充滿了來自origin/master的變化我想恢復,但是如果我取消它們,它們將與我未經分級的未更改的變化混合。

我該如何解決這種情況?

我假設整個更改的混亂是由於您的合並沖突。 我建議做的是。

  1. 從合並中提交更改(完成它)。 你最終會提交一個提交,這是暫時的(不要推!)
  2. git stash您未提交的更改,以便我們不會丟失它們。
  3. git log -3 ,這將顯示您的合並提交以及之前的2次提交。 在合並提交中,您將看到2 SHAS。 一個是origin / master的最新提交,另一個是您的分支上的最后一次提交。
  4. git reset --hard <SHA of YOUR last commit>這將在你合並之前將你的分支重置為你去掉你從master中引入的所有提交/更改。
  5. git stash pop可以將您未提交的更改恢復到您的分支。

由於您的更改都在您的本地分支上,因此您可以修改歷史記錄以使狀態恢復到您想要的狀態而不會出現任何問題。 如果您確實需要任何暫存文件,請執行git reset -- <filenames>以取消它們,然后按照上述步驟操作。

我想你可能想要git merge --abort
從文檔:

中止當前的沖突解決過程,並嘗試重建合並前的狀態。

如果在合並開始時存在未提交的工作樹更改,則git merge --abort在某些情況下將無法重建這些更改。 因此,建議在運行git merge之前始終提交或存儲您的更改。

http://git-scm.com/docs/git-merge

我有TortoiseGit來管理我的git repos,它非常方便。 這些是我要做的步驟(使用TortoiseGit) - 首先存儲您的更改(TortoiseGit-> Stash)並正確命名,因此所有未提交的更改都會保存到存儲中

  • 第二,(右鍵單擊你的repo-> TortoiseGit)“顯示日志”,這將顯示所有更改日志,(假設你知道你在合並之前的位置 - 也許你已經完成了一些提交)尋找它,並且右鍵單擊該更改日志,在下一節中說“重置為此提交”,選擇“硬重置”,這將從所選提交中刪除所有提交到頂部,並刪除更改。

  • 重新應用您的存儲(右鍵單擊,TortoiseGit-> Stash),然后應用您之前保存的存儲

您可以恢復合並步驟,它將附加一個新的提交,撤消合並中的所有文件更改

$ git revert <merge_commit_hash>

如果你執行一個$ git log --graph --oneline你將不得不尋找類似於“合並分支”foo“of”remote_x“blah blah”的提交“

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM