git:检查筛选器分支是否会触及已推送的提交
基本上,我想得到一个警告,如果一个过滤器分支将更改一个已经被推送的提交 假设我想做一个实验git:检查筛选器分支是否会触及已推送的提交,git,push,git-filter-branch,Git,Push,Git Filter Branch,基本上,我想得到一个警告,如果一个过滤器分支将更改一个已经被推送的提交 假设我想做一个实验 git filter-branch ... --ancestry-path A^..HEAD 当然,我可以创建一个受影响哈希的列表,并用一个已经推送的所有哈希的列表来“comm”进行比较。有没有更直接的解决方案 编辑:我对可编写脚本的解决方案感兴趣。假设您领先于master(或您正在处理的任何分支),并运行git status,您将看到如下内容: Your branch is ahead of 'ori
git filter-branch ... --ancestry-path A^..HEAD
当然,我可以创建一个受影响哈希的列表,并用一个已经推送的所有哈希的列表来“comm”进行比较。有没有更直接的解决方案
编辑:我对可编写脚本的解决方案感兴趣。假设您领先于
master
(或您正在处理的任何分支),并运行git status
,您将看到如下内容:
Your branch is ahead of 'origin/master' by 1 commit.
最简单的方法是运行过滤器分支
,然后再次运行状态
。如果所有更改都不影响已推送的提交,则消息不会更改。如果您确实更改了推送的内容,则消息将变为:
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commit each, respectively.
如果您想退出,请在运行
过滤器分支之前保存提交SHA,您可以使用git reset返回到它--硬SHA
我应该强调我正在寻找一个可编写脚本的解决方案。我目前的解决方案相当繁重,可能无法在所有情况下都起作用:
#!/bin/bash
COMMIT="$1"
git log --format="%H %h %s" --ancestry-path $COMMIT"^.." | \
grep -f \
<(comm -12 \
<(git log --format=%H --ancestry-path $COMMIT"^.." | sort) \
<(git log --format=%H $(git for-each-ref --format="%(refname)" refs/remotes/) | sort)\
) | \
cut -d " " -f 2- | grep "." && { echo 'Some already pushed commits are affected!'; exit 1; }
git filter-branch ... --ancestry-path $COMMIT"^.."
#/bin/bash
COMMIT=“$1”
git日志--format=“%H%H%s”--祖先路径$COMMIT“^..”\
grep-f\
我想知道请求原谅是否比请求许可更容易:只需进行更改并尝试推送git
,如果失败,则恢复筛选器分支
更改。仅检查立即a^
子级难道还不够吗?(如果我正确理解你的情况,应该是A
)。如果未推送它们,则它们上面的任何提交都不会按要求推送well@max630当前位置但是如何证明他们还没有被推到目前为止?(关于当前注册的remotes)类似于git branch的东西--remotes--包含一个
@max630:是的,这是一个解决方案,但我仍然需要做一些丑陋的后期处理。这似乎是一个品味的问题git log--oneline$COMMIT..$(git branch-r--包含$COMMIT |{grep-v-->“| | echo$COMMIT;}| tail-1 | tr-d”“)| grep”。&&{echo'一些已经推送的提交会受到影响!;退出1;