Ale*_*lec 5 git version-control github git-rebase
当功能分支重新基于 origin/master 而不是合并时,如何安全地删除它的本地副本。我知道我可以git branch -D,但我想避免盲目这样做,让 git 告诉我哪些分支可以安全删除。
例如:我有功能分支my-feature,我将其推送到origin/my-feature,制作 PR,然后origin/my-feature重新基于origin/master,然后删除。不过,本地my-feature仍然存在。* 有什么方法可以检测到那里的更改已有效包含在中吗origin/master?
git diff origin/master...my-feature不起作用,因为共同的祖先origin/master没有改变。检查是否git diff origin/master..my-feature为空有效,但只能在变基后立即进行。如果任何其他更改在我的基础上重新建立,这将显示这些更改。
有没有办法删除远程版本已被删除的本地分支?(但不是从未有远程版本的本地分支)。或者,如果我避免删除origin/my-feature,那么我可以在本地做些什么来安全地删除两者origin/my-feature吗my-feature?
* 如果我足够自律,我会尽量记住在删除远程分支后立即删除本地分支,但有时我会忘记。
git cherry很完美,从来不知道这一点。我创建了一个别名来清理已合并到的所有分支upstream/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"
Run Code Online (Sandbox Code Playgroud)
更易读一点:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1822 次 |
| 最近记录: |