GIT撤消分支-D

时间:2017-05-29 12:13:45

标签: git

在主远程分支上合并我的更改后,我想删除分支的名称并将分支保留在原来的位置。只删除它的名字(在我的团队中,他们不喜欢带名字的分支,除非它们是版本)。

所以我做了以下事情:

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

但是整个分支被移除了,并且在标题上变化消失了。可以撤消"分支-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上。在我认为这种情况下,系统应该提供建议,而不是说我只是&#34;简单地说#34;在分支A ...

2 个答案:

答案 0 :(得分:4)

是的,git中有一个名为git reflog的实用程序,其中记录了所有更改。如果你想要恢复该分支,请执行以下操作:

执行git reflog并在已删除分支的尖端找到提交的SHA1,然后只需

git checkout -b <branch> <sha>

答案 1 :(得分:0)

您将is not fully mergedis not pushed混为一谈 如果你e。 G。在本地分支master上,您尝试删除合并到foo的分支master,您收到此消息。
如果您在本地分支机构bar,并且您尝试删除相同的分支foo,但 已合并到bar,则表示您没有收到该消息。<登记/> 这是为了确保您不删除尚未合并但希望将来合并的分支,因为您可能会松开提交。

要找到您的分支,只需执行reflog即可查看HEAD的{​​{1}},并在您检出该分支时搜索最后一次。这应该是你在该分支上的最后一次提交。如果没有,您可能会发现git reflog为悬空物体。

如果您在分支上找到了最新的提交,只需使用git fsck --lost-foundgit branch your-branch <found commit-ish>重新创建。

要删除远程端的分支而不删除本地分支,只需使用最后一个命令即可。即git checkout -b your-branch <found commit-ish>表示“在原点上不向远程分支推送”,因此在原点上删除它而不触及本地分支。