变基以集成更改(不是在拉取请求的上下文中)?

Rebasing in order to integrate changes (not in the context of pull requests)?

我只能在拉取请求的上下文中找到有关变基的信息,但我想做的与拉取请求无关。我的情况如下:

我对公司软件的分支进行了一些更改,我们称此为提交 x。在这次提交之后,我向我同事的 fork 发送了一个 PR。

然后我做了更多的改变。我还没有承诺那些;他们现在在我的工作树中。

原来我在提交 x 中犯了一些错误,我的同事修复了这些错误并将更改提交到他的 fork,让我们称他的提交为提交 y。所以他最近的提交是 y.

有没有办法将我的 fork 变基(或其他一些操作,如果这不是 rebase 的正确用法),这样我最近的提交是 y(那么 x 将是第二个最近的提交) ,同时还保留我的工作树更改?

简短回答是的,有几种方法可以处理这个问题。这是我觉得最简单的:

  1. 从你的分支开始,
git checkout -b [copy-of-working-branch-with-commit-x-and-commit-y]

复制你的分支as-is

  1. git checkout [original-working-branch-with-commit-x-and-commit-y]
git reset --hard [remote-branch]

使用您 co-worker 推送的更改(提醒:这将覆盖 commit-y!)

  1. 终于可以了
git cherry-pick [sha for most recent commit-y-from-copy-branch]

应该就可以了!

存储您的更改

git stash

拉动您的同事进行更改

git pull

re-apply 您隐藏的零钱

git stash pop

如果有冲突,不会自动删除存储。解决冲突后,使用

git stash drop

有关存储的更多信息,请参阅 man git-stash and Stashing and Cleaning