一些背景知识:
现状。
优先级发生了变化,我在同一个开发分支上研究了另一个功能。我应该创建一个不同的分支,但我继续添加我当前更改的新功能并签入。这意味着我的开发分支已经进行了所有2周的更改+这一个新功能。
我想做什么?
我想获取上游/开发的确切副本到我的当前(我不想创建另一个分支)开发分支并仅应用我的最新更改并推送它
在同一分支上应用我之前的两周工作。我几天后会推。
有人可以帮助我使用git命令并解释在后台发生的事情吗?
我尝试过的事情。 git reset --hard 这告诉我,我的头已脱离。
git rebase -i upstream / branch。 我认为这将适用于我的所有更改,但我只想要最后一次更改。
答案 0 :(得分:1)
我认为对应于您的情况的提交图如下所示:
A--B--C--X [develop]
/
o--o--o <-- develop from couple of weeks ago
\
O--O [upstream/develop]
A--B--C
是您的两周工作,X
是您最新的新功能。
现在您执行以下操作:
$ git branch twoweeks C
您需要找出commit C
的哈希并在命令中使用它,或者使用图形存储库浏览器在该提交上创建分支。
分支只是临时的,最后会被删除,但我们现在需要它在下一步完成后保留两周的工作。
结果:
X [develop]
/
A--B--C [twoweeks]
/
o--o--o--O--O [upstream/develop]
$ git rebase --onto upstream/develop twoweeks develop
结果:
A--B--C [twoweeks]
/
o--o--o--O--O [upstream/develop]
\
X [develop]
$ git rebase develop twoweeks
结果:
o--o--o--O--O [upstream/develop]
\
X [develop]
\
A--B--C [twoweeks]
推送新功能
$ 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]