Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 有什么方法可以在将要素分支重定到另一个分支后安全地删除它?_Git_Github_Version Control_Git Rebase - Fatal编程技术网

Git 有什么方法可以在将要素分支重定到另一个分支后安全地删除它?

Git 有什么方法可以在将要素分支重定到另一个分支后安全地删除它?,git,github,version-control,git-rebase,Git,Github,Version Control,Git Rebase,当要素分支的本地副本重设为“原点/母版”而不是“合并”时,如何安全地将其删除。我知道我可以git branch-D,但我希望避免盲目地这样做,让git告诉我哪些分支可以安全地删除 例如:我有功能分支my feature,我将其推到origin/my feature,做一个PR,origin/my feature被重新设置到origin/master,然后被删除。本地我的功能仍然保留。*是否有任何方法可以检测到其中的更改已有效地包含在源代码/主代码中 git diff origin/master…

当要素分支的本地副本重设为“原点/母版”而不是“合并”时,如何安全地将其删除。我知道我可以
git branch-D
,但我希望避免盲目地这样做,让git告诉我哪些分支可以安全地删除

例如:我有功能分支
my feature
,我将其推到
origin/my feature
,做一个PR,
origin/my feature
被重新设置到
origin/master
,然后被删除。本地
我的功能
仍然保留。*是否有任何方法可以检测到其中的更改已有效地包含在
源代码/主代码

git diff origin/master…我的功能
不起作用,因为与
origin/master
的共同祖先没有改变。检查
git diff origin/master..my feature
是否为空可以工作,但只能在重定基址后立即工作。如果任何其他更改在我的基础上重新设置,这将显示这些更改

有没有办法删除远程版本已被删除的本地分支?(但不包括从未有过远程版本的本地分支)。或者,如果我避免删除
origin/my feature
,那么我是否可以在本地安全地删除
origin/my feature
my feature


*如果我有足够的纪律性,我会尽量记住在远程分支被删除后立即删除本地分支,但有时我会忘记。

让我先插入一些背景信息。我相信你说的是当有人在GitHub上使用“重设基础并合并”clicky按钮时会发生什么。这会将提交复制到添加到目标分支尖端的一组新提交:

...--o--o--*--o   <-- master
            \
             A--B--C   <-- pullrequested

同样,您可以使用
git cherry
查看是否所有提交(此处,
A-B-C
)都已复制。如果有人把它打包成一个脚本,那就太好了。

git cherry
非常完美,从来都不知道这一点。我制作了一个别名来清理所有合并到
上游/master
中的分支:

branch-cleanup = "!f(){ for b in $(git for-each-ref refs/heads --format=\"%(refname:short)\"); do if [[ ! $(git cherry -v upstream/master $b | grep \"^+\") ]]; then git branch -D $b; fi; done };f"
更容易理解一点:

for b in $(git for-each-ref refs/heads --format="%(refname:short)"); do  # Go through each branch
  # git cherry prefixes each commit with "+" if it's not included and "-" if it is, so check if there are no "+" lines:
  if [[ ! $(git cherry upstream/master $b | grep "^+") ]]; then
    git branch -D $b
  fi
done

在这种情况下使用git cherry这将删除本地
主分支,不是吗?是的,但我没有保留本地主分支。我做了一个小小的改进,这样它就不会删除本地
主分支
开发
开发
分支:
for b in$(git branch--format=“%(refname:short)”| grep-vE”(master | develop | dev);(do#遍历每个分支#git cherry在每个commit前面加上“+”如果没有包含,如果是“-”,那么检查是否没有“+”行:如果[!$(git cherry origin/master$b | grep”^+”];那么git branch-d$b fi done
branch-cleanup = "!f(){ for b in $(git for-each-ref refs/heads --format=\"%(refname:short)\"); do if [[ ! $(git cherry -v upstream/master $b | grep \"^+\") ]]; then git branch -D $b; fi; done };f"
for b in $(git for-each-ref refs/heads --format="%(refname:short)"); do  # Go through each branch
  # git cherry prefixes each commit with "+" if it's not included and "-" if it is, so check if there are no "+" lines:
  if [[ ! $(git cherry upstream/master $b | grep "^+") ]]; then
    git branch -D $b
  fi
done