在跟踪分支之上重新设置 git 个分支

Rebasing git branches on top of tracking branches

假设您有一个 Git 存储库,其中包含 master 分支跟踪 origin/master 和长期存在的 release 分支跟踪 origin/release。现在,假设 git fetch 操作更改了跟踪分支,使得 release 落后。最后,假设您有未隐藏的更改。

如果我们在 master 上执行 git rebase --autostash,那么 master 将与其远程保持同步,并且未隐藏的更改将被保留,没有 rebase/unstash 冲突。问题是,如果我在 master 上有未隐藏的更改(可能落后于 origin/master),我应该怎么做才能让 release 不再落后于 origin/release

我最好的猜测是使用某种形式的 git rebase --autostash --onto,但我不确定其余参数会是什么样子。也许 git rebase --autostash --onto release origin/release release?

另外,将release重置为origin/release就足够了吗?

如果您在 masterrelease 的本地副本上没有新提交,那么是的,无需使用 rebase 将它们重置为远程副本就足够了.此外,您甚至可以在不检查分支的情况下实现您的示例场景:

如果您“在 master 上有未隐藏的更改”,并且您希望将 release 更新为 origin/release。您可以简单地 运行 命令:

git fetch
git branch -f release origin/release

但是,如果您能够做到这一点,那么正如 torek 指出的那样 ,您可能甚至不需要 release 的本地副本,因为任何时候您都可以引用它可以使用 origin/release 代替。

if I am on master with unstashed changes (and possibly behind origin/master), what should I do in order to have release no longer behind origin/release?

git fetch origin release:release

这可以有效地释放,而无需切换到它。您所在分支的状态无关紧要。