如何从 git 存储库获取最新信息并应用我在分支上重新排序的更改
How to get latest from git repository and apply my changes reordered on branch
一些背景:
- 我从上游存储库 fork。
- 几周前从这个分支结帐开发分支
- 执行了一些更改并签入(尚未推送)
- 与此同时,一些其他更改被推送到开发上游分支。
现状。
优先级改变了,我在同一个开发分支上开发了另一个功能。我应该创建一个不同的分支,但我继续在当前更改的顶部添加新功能并签入。这意味着我的开发分支有我所有 2 周的更改 + 这个新功能。
我想做什么?
我想得到 upstream/develop 的精确副本到我的 current (我不想创建另一个分支)开发分支并应用只有我对它的最新更改并推送它。
在同一分支上应用我过去两周的工作在此更改之上。这个我会在几天后推送。
有人可以用 git 命令帮助我并解释后台发生的事情吗?
我尝试过的东西。
git 重置 --hard
这告诉我我的脑袋是分离的。
git 变基 -i upstream/branch。
我认为这将应用我的所有更改,但我只想要我所做的最后更改。
我想象对应于你的情况的提交图看起来像这样:
A--B--C--X [develop]
/
o--o--o <-- develop from couple of weeks ago
\
O--O [upstream/develop]
A--B--C
是您两周的工作,X
是您的最新功能。
现在您执行以下操作:
1。标记两周工作的结束
$ git branch twoweeks C
您需要找出提交 C
的散列并在命令中使用它,或者使用图形存储库浏览器在该提交上创建分支。
该分支只是临时的,最后会再次删除,但我们现在需要它来保留下一步完成后的两周工作。
结果:
X [develop]
/
A--B--C [twoweeks]
/
o--o--o--O--O [upstream/develop]
2。将新功能移至
$ git rebase --onto upstream/develop twoweeks develop
结果:
A--B--C [twoweeks]
/
o--o--o--O--O [upstream/develop]
\
X [develop]
3。把两周的工作移过去
$ git rebase develop twoweeks
结果:
o--o--o--O--O [upstream/develop]
\
X [develop]
\
A--B--C [twoweeks]
4。清理
推送新功能
$ git checkout develop
$ git push
结果:
o--o--o--O--O--X [upstream/develop] [develop]
\
A--B--C [twoweeks]
快进本地开发分支并删除临时分支
$ git checkout develop
$ git merge --ff-only twoweeks
(使用 --ff-only
作为完整性检查,如果失败则表明您做错了什么)
$ git branch -d twoweeks
结果:
o--o--o--O--O--X [upstream/develop]
\
A--B--C [develop]
参考资料
一些背景:
- 我从上游存储库 fork。
- 几周前从这个分支结帐开发分支
- 执行了一些更改并签入(尚未推送)
- 与此同时,一些其他更改被推送到开发上游分支。
现状。
优先级改变了,我在同一个开发分支上开发了另一个功能。我应该创建一个不同的分支,但我继续在当前更改的顶部添加新功能并签入。这意味着我的开发分支有我所有 2 周的更改 + 这个新功能。
我想做什么?
我想得到 upstream/develop 的精确副本到我的 current (我不想创建另一个分支)开发分支并应用只有我对它的最新更改并推送它。
在同一分支上应用我过去两周的工作在此更改之上。这个我会在几天后推送。
有人可以用 git 命令帮助我并解释后台发生的事情吗?
我尝试过的东西。 git 重置 --hard 这告诉我我的脑袋是分离的。
git 变基 -i upstream/branch。 我认为这将应用我的所有更改,但我只想要我所做的最后更改。
我想象对应于你的情况的提交图看起来像这样:
A--B--C--X [develop]
/
o--o--o <-- develop from couple of weeks ago
\
O--O [upstream/develop]
A--B--C
是您两周的工作,X
是您的最新功能。
现在您执行以下操作:
1。标记两周工作的结束
$ git branch twoweeks C
您需要找出提交 C
的散列并在命令中使用它,或者使用图形存储库浏览器在该提交上创建分支。
该分支只是临时的,最后会再次删除,但我们现在需要它来保留下一步完成后的两周工作。
结果:
X [develop]
/
A--B--C [twoweeks]
/
o--o--o--O--O [upstream/develop]
2。将新功能移至
$ git rebase --onto upstream/develop twoweeks develop
结果:
A--B--C [twoweeks]
/
o--o--o--O--O [upstream/develop]
\
X [develop]
3。把两周的工作移过去
$ git rebase develop twoweeks
结果:
o--o--o--O--O [upstream/develop]
\
X [develop]
\
A--B--C [twoweeks]
4。清理
推送新功能
$ git checkout develop $ git push
结果:
o--o--o--O--O--X [upstream/develop] [develop] \ A--B--C [twoweeks]
快进本地开发分支并删除临时分支
$ git checkout develop $ git merge --ff-only twoweeks
(使用
--ff-only
作为完整性检查,如果失败则表明您做错了什么)$ git branch -d twoweeks
结果:
o--o--o--O--O--X [upstream/develop] \ A--B--C [develop]