2014-09-11 41 views
0

我正在研究一個主題分支,我將其稱爲'主題'。一位同事將一些變化推到了一個名爲develop的共享分支上,我想將它引入主題分支。我想我會想推出一個合併提交似乎混亂。所以我執行了下面的命令:撤消共享歷史記錄的Git rebase

git checkout develop 
git pull 
git rebase topic develop 
git checkout topic 
git merge develop 

我執行的git pull拉下了幾個變化,包括我想要的變化。我的git被配置爲在相關情況下總是重新綁定。

只有當我執行了所有的命令後,我意識到我已經改變了共享歷史並且搞砸了。我還沒有推動任何東西。撤消/修復上述問題的最佳方法是什麼?儘管事實上我的情況涉及改變共享歷史記錄,this會以一種安全的方式解決我的情況嗎?

+1

是的,'git reflog'是你的朋友。實際上,它允許「回憶」以前放棄的任何提交(當然在某種程度上),因此您可以在最近發生的更改之前將分支機構置於狀態。 – user3159253 2014-09-11 10:09:44

+0

是的,你可以獨立於彼此恢復你的分支。當然,結果應該仔細驗證,但技術上git分支只是指向某些提交鏈的提示的標籤,所以您可以自由地將特定分支指向通過'git reflog'發現的其他地方。 – user3159253 2014-09-11 10:12:34

+0

我重置了 - 對rebase之前的提交,但是我試圖合併到開發主題分支中的提交仍然改變了它們的日期。它們最初是在2天前製作的,但他們的日期今天仍然說。這不會搞砸了嗎?推動這一點似乎並不安全。 – CalumMcCall 2014-09-11 10:22:06

回答

1

這是我對子級做

git stash # clean index and working copy 
git reflog topiC# see history of topic ref 
git checkout topiC# switch to topic branch 
git reset --hard [email protected]{N} # restore topic branch to state previous to merge and rebase (use the number from git reflog instead of N) 

git stash # clean index and working copy 
git reflog develop 
git checkout develop # switch to develop branch 
git reset --hard [email protected]{N} # since index and WC was clean, there is no changes to lost due to --hard 

注意:你應該有合併時重訂和合並,以避免這種情況,如果可能的話,你應該選擇這兩個中的一個(或重訂,合併的極端謹慎,而不是兩個)

一旦你恢復原來的清潔狀態,acchieve你是想從一開始就做什麼,你可以變基的話題上進行開發,這種方式:

git checkout topiC# switch to topic branch 
git fetch # get last changes from remote repository on "origin/" branches 
git stash # clean WC and index 
git rebase origin/develop 

請記住,如果對主題分支的推送不是針對不同的客戶端共享的,則只能進行此重定位。將不會在主題分支上與其他存儲庫合併)