我做了一个拉取请求,将my-feature-branch
合并到GitHub上的master
。 repo所有者向我的分支添加了一个提交,合并到master
,并使用GitHub GUI删除my-feature-branch
。我使用git pull master
进行了更新,使用git pull --prune
删除了跟踪分支。但是当我尝试使用git branch --delete my-feature-branch
删除本地功能分支时,我得到error: The branch 'my-feature-branch' is not fully merged.
我有点理解为什么Git这么说; my-feature-branch
从未在我的本地仓库中合并到master
(它只在远程仓库中完成)。我当然可以用git branch -D my-feature-branch
忽略此消息。
但在这种情况下,很明显,删除本地仓库中的my-feature-branch
不会丢失任何内容,因为它可以通过合并我创建的master
提交来访问PR。
通常Git非常善于确定某些事情是否安全。我可以做得更好并避免not fully merged
消息吗?
答案 0 :(得分:1)
正如我在评论中提到的,分支是远程合并还是本地合并无关紧要;这对Git来说都是一样的。这就是您描述的情况的正常历史记录:
*--*--*--*--*--*--*---C [master]
\ /
*--*--*--*--A--B
|
[my-feature-branch]
其中A
是您在my-feature-branch
的本地版本上的最后一次提交。 B
是repo所有者提交的,C
是合并提交。
当你在master
并且git branch --delete my-feature-branch
时,所有Git都会检查提交A
是否是提交C
的祖先。您可以使用以下方法模拟此检查:
git merge-base --is-ancestor my-feature-branch master
(此命令将返回0表示成功,1表示失败。)
我(还)不知道为什么这项检查失败了,但我有一个解决方法,应该揭示原因。做:
git checkout my-feature-branch
git branch my-feature-bak # add backup of original feature branch, if desired
git rebase master
由于您的分支已经合并到master
,因此在rebase期间应该跳过大部分/全部提交。无论出于何种原因,任何遗留下来的东西都会被合并到master
中。
接下来,检查输出:
git log my-feature-branch..master
看看发生了什么。
如果您希望将任何剩余的提交包含在回购中,那么您可以根据需要创建新的分支和/或挑选提交。
答案 1 :(得分:-1)
查看您的功能分支,然后再次尝试git pull
。
(git checkout my-feature-branch
,然后是git pull
)
然后,再次结帐并查看分支是否合并:
git checkout master
,git branch --merged
一旦两个分支都更新,您应该能够用git branch -d my-feature-branch
删除您的分支;看来你可能只是从遥控器更新了主人。