2017-05-29 143 views
0

在主遠程分支上合併我的更改後,我想刪除我的分支的名稱並將分支留在它所在的位置。只刪除其名稱(在我的團隊中,他們不喜歡名稱分支,除非它們是發行版)。GIT撤消分支-D

所以我做了以下內容:

git branch -d branch_2b_deleted 
error: The branch 'branch_2b_deleted' is not fully merged. 
If you are sure you want to delete it, run 'git branch -D branch_2b_deleted' 
git branch -D branch_deleted 
git push origin :remoteHead 

但去除整個分支,並在標題的變化消失。是否可以撤消「branch -D」命令?

否則我必須重做工作並等待請求。我也不知道爲什麼該分支沒有完全合併的消息,在我看來,在遠程分支上的所有變化。

---編輯--- 我通過重新合併來解決問題,(現在很難通過單詞解釋樹是怎麼樣的)。 之後,我又遇到了另一個問題,因爲當我想爲branchA分配一個標籤時,這個標籤被分配給了branchB。我的控制檯告訴我,我在branchA上,但GIT指向了branchB。所以我做:

$ git pull 
There is no tracking information for the current branch. 
Please specify which branch you want to merge with. 
See git-pull(1) for details 

git pull <remote> <branch> 

If you wish to set tracking information for this branch you can do so with: 

git branch --set-upstream-to=origin/<branch> branchA 

解決的,我所做的:

git pull origin branchA 

,這所做的工作。即使在控制檯上寫了我正在使用branchA(在:git checkout branchA之後),我也不在branchA上。系統應建議在這種情況下,我想,並不是說我「簡單地」在分支A ...

+0

請閱讀關於git分支的教程,git告訴你它沒有完全合併,然後你繼續並要求它刪除你的分支,然後事後驚訝分支被刪除表明你真的需要了解git中的分支如何工作。 –

+0

分支被合併,合併期間沒有錯誤。 也許有些錯誤?有什麼問題。現在,例如,我在分支A上,我添加了一個標籤,而標籤出現在另一個分支上。 – fresko

回答

3

是的,在git中有一個名爲git reflog的實用程序,其中記錄了所有更改。如果你想恢復分支做如下因素:

做的git引用日誌,找到SHA1的承諾在您刪除分支的末端,那麼就

git checkout -b <branch> <sha>

+0

在reflog中,我可以找到前面的命令,當我「離開」該分支以刪除它時,但不是刪除命令。 – fresko

+0

是的,「左」行動也適用於此。在我建議你的'git checkout'命令中使用該動作的SHA – Jesferman

0

你混淆is not fully mergedis not pushed
如果你e。 G。在本地分支master並且您嘗試刪除分支foo其中不是合併到master您會收到此消息。
如果您在本地分支bar並且您嘗試刪除同一分支foo但它合併到bar,您不會收到消息。
這是爲了確保您不會刪除尚未合併但將來要合併的分支,因爲您可能會丟失提交。

要找到您的分支,您可以通過僅執行git reflog來查看的,並搜索您最後一次檢出分支。這應該是你在該分支上的最後一次提交。如果不是,您可能會發現它與git fsck --lost-found一樣懸掛的物體。

如果您在分支上找到了您的最新提交,只需使用git branch your-branch <found commit-ish>git checkout -b your-branch <found commit-ish>重新創建即可。

要刪除遠程端的分支而不刪除本地分支,只需使用最後一條命令即i。即git push origin :remote-branch這意味着「無需將任何東西推送到遠程分支」並因此在原點上刪除它,而無需觸及本地分支。