[英]Removing/undoing a merge on Sourcetree
我在我的項目中做了很少的更改(我正在處理遠程分支而不是主分支),我提交了它們並在 BitBucket 上創建了一個拉取請求並將分支合並到主分支。 我忘記在提交后推送我的更改。 現在,在嘗試將當前分支切換到我的遠程分支並恢復到合並之前的提交之后,我設法取回所有更改並將它們備份到我系統的其他地方。 我現在要做的是撤消我所做的錯誤合並。 每次單擊合並並選擇“反向提交”時,都會收到以下錯誤消息:
“錯誤:提交是一個合並,但沒有給出 -m 選項。
致命:還原失敗”
分支現在看起來像這樣:
我想刪除合並並將其置於不再顯示master(4 behind)
的狀態。
此方法基於歷史刪除:
git push origin name_of_branch --force
到終端(您可能需要輸入您的 git repo 用戶名和密碼才能接受命令)更新:當前版本的源碼樹支持強制推送。 這意味着您不需要使用步驟 5 中提到的命令! 推動時可見一個標有“力”的復選框。 它通常被禁用。
如何啟用強制推送復選框:
推送時選中該復選框以修復源服務器上的錯誤。
這可能是最簡單的方法,但由於它基於歷史刪除,如果其他人正在處理該項目,請確保讓他們都知道您在做什么,這樣您就不會破壞任何人的 git 存儲庫。
更新 2:如果您使用 Visual Studio Code 作為代碼編輯器,我強烈建議您安裝“Git Graph”擴展。 它允許您執行源樹允許您執行的幾乎所有操作,但您可以直接在代碼編輯器中執行此操作! 使用 Git Graph 執行此操作的步驟與在 Source Tree 中執行此操作的步驟大致相同。
非常不幸的是,SourceTree 無法讓您輕松恢復合並提交(至少在 Windows SourceTree 1.5.2.0 中)。 但是,可以從命令行輕松完成恢復合並,但是您想通過添加與合並提交結果相反的另一個提交來恢復合並,還是只想從歷史記錄中刪除合並提交共?
如果您不與其他人共享您的master
分支,最簡單的做法是簡單地進行硬重置以從歷史記錄中刪除合並提交。 但是,如果其他人已經擁有該合並提交的副本,那么當他們嘗試將他們的master
副本與您的重寫版本重新同步時,您將為他們創建額外的工作。
所以你需要弄清楚你想使用哪個選項。 我將使用命令行給出兩者的步驟:
git checkout master
git push origin master --force
這將使用本地master
分支的當前狀態覆蓋origin/master
上的合並提交,從而刪除合並提交。
git checkout master
git merge origin/master
git revert -m 1 HEAD
這將使您的本地master
分支與origin/master
同步,然后您可以通過告訴git revert
第一個父級是應該被視為“主線”父級的那個來添加反向提交,它將創建相對於從另一個父提交帶來的更改的反向提交。
如果稍后您決定要再次從另一個父級引入更改,那么您需要添加另一個還原提交來還原您剛剛所做的還原提交(一種稱為“還原還原”的技術)。
也可以看看:
請按照以下步驟進行:
恢復合並提交
Master 與沖突/不需要的代碼合並並推入開發。
使用 Sourcetree 恢復:
“Reset develop to this commit”
。hard
。 完成。此后不應有拉力。 如果發生任何拉動,請使用以下終端恢復。
現在將master合並到develop。
要使用終端恢復:
git reset --hard <commit_before_merge id long one>
git push -f
,然后完成。合並master到develop。
我找到了另一種沒有命令行的方法,有點難看,但可以完成工作。
因此,對要回滾的提交進行硬重置,轉到項目文件夾(在 Mac 上使用 Finder 或在 Windows 上使用資源管理器)並復制整個文件夾。 您在此“復制”文件夾中的內容是您希望在此過程結束時到達的位置。
嗯...回到源代碼樹,然后簽出 Head(最新提交到您的遙控器),然后再次導航到項目文件夾,確保您可以看到隱藏文件夾,因為您必須能夠看到名為“.混蛋”
從當前項目中刪除“.git”以外的所有內容,這意味着您當前的項目除了名為“.git”的文件夾之外什么都沒有,然后導航到“復制”文件夾並復制“.git”文件夾以外的所有內容並粘貼內容在您當前的項目中(僅包含“.git”文件夾的項目)
完畢。 轉到源代碼樹並提交更改,您的項目正是您想要的位置,並且所有更改都已刪除。
結束。
Obs1:現在刪除“復制”文件夾以清除您的電腦上的臟文件。
Obs2:此過程不會從 Git 中刪除您的更改,提交將在那里,您所做的是刪除您的更改並提交它。
我遇到了一種情況,我以前的解決方案不是一個選擇。 我無法強制推送掌握,即使我可以,這對其他開發人員來說也太具有破壞性了。
我發現了這種新方法,它可以 100% 保留 git 歷史記錄,並且對團隊中的其他開發人員完全沒有干擾。
而已!
(您可以通過右鍵單擊 git 歷史記錄中的提交並從上下文相關菜單中選擇選項來完成大部分操作)
如果發生這種情況:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.