在本地和远程删除后,Git分支仍然存在

jww*_*jww 0 git branch

我有一个名为Atomics的开发分支(更准确地说,atomics).它完成了开发.它测试好了,所以它被合并到Master.我现在准备完全删除它,因为它不再需要它.

真的认为这个问题很明确并且回答得很好:在本地和远程删除Git分支.唉,它不起作用......

这是我做的:

# Accepted answer, succeeded
$ git push origin --delete atomics

# Shit, it did not delete the local branch
$ git branch -a
...
* master
atomics

# Another answer. Whoops, causes an error
git push --delete origin atomics
error: unable to delete 'atomics': remote ref does not exist

# Try yet another answer:
git fetch --all --prune

# Check again
$ git branch -a
...
* master
atomics
Run Code Online (Sandbox Code Playgroud)

根据托雷克的回答:

$ git branch -d atomics
error: The branch 'atomics' is not fully merged.

# See below on the prelude that may have caused this
# (yet another Git black-hole)

# Yep, did not work
$ git fetch --prune origin
$ git branch -a
* master
atomics
...
Run Code Online (Sandbox Code Playgroud)

如果重要,这是Apple的Git:

$ git --version
git version 1.8.5.2 (Apple Git-48)
Run Code Online (Sandbox Code Playgroud)

在这一点上,我有两个问题.首先,我们如何删除实际工作的本地和远程分支?鉴于引用的问题,这似乎是多余的,但即使答案被接受,这个问题似乎也没有得到回答.

其次,我如何从这个特殊的Git状态恢复,其中部分删除的东西?


这是前奏.这--squash是为了确保登录Master是准确的.

$ git checkout master
$ git merge --squash atomics
# These files already existed in Master, but a 'git push' after the merge
# did nothing. Also, 'git status' showed they were modified.
$ git add a.h b.h a.cpp b.cpp
$ git commit a.h b.h a.cpp b.cpp -m "Mergae Atomics into Master"
$ git push
Run Code Online (Sandbox Code Playgroud)

编辑:我接受了Torek的回答,因为这个男人太努力了,不能从中得到一些东西.不幸的是,该程序对这个问题不起作用; 当删除另一个dev分支时,它不适用于以下实验.该工具已损坏,并且没有任何可以解决问题的问答.

tor*_*rek 6

TL; DR:以任何顺序使用(至少)两个命令.删除本地(和/或远程跟踪,也是本地).删除远程.

在您的输出中,atomics是一个本地分支.要删除它,请确保您没有删除它(您不是,它本来是前缀*,这只是一般的第一步),然后用git branch -d它来删除它.

[ 编辑以说明发生的事情的编辑评论git branch -d:如果Git抱怨本地分支没有完全合并,Git试图告诉你可能会有一些提交你将无法访问,这是没有保存在其他地方.如果那没关系 - 如果你真的想放弃它们,或者你是想保留它们但是非常确定它们安全地保存在某个地方 - 你可以告诉Git强制删除,使用git branch -Dgit branch --delete --force.这指示Git忽略可能被放弃的提交.结束编辑 ]

这些push --delete东西是告诉一些其他 Git,在某个远程站点,删除他的本地分支.在其他网站上发生的事情一般不会影响您当地的东西.有一些例外,特别是git fetchgit push 能够进行本地更改,但默认情况下没有一个会影响任何本地分行在所有的,不管是什么它成功或得到一些其他的Git做失败.

您可能还需要git fetch --prune origin删除远程跟踪分支(尽管名称是您的存储库的本地名称).您可以改为使用git branch -r -d origin/atomics(本地删除远程跟踪分支origin/atomics).