提交对另一个分支的选择更改,然后在当前分支上恢复工作?
-
28-09-2019 - |
题
这经常发生在我的工作流程中:我正在一个单独的分支中处理一个功能,而在这样做的同时,我会遇到需要修复的小东西,但从框架或站点布局中的更高范围内。
我想切换回主 发展 分支并提交从那里的选择文件更改,然后返回到 特征 分支,并重新构想,以便我可以继续使用无关的调整/错误框架继续前进。
我正在使用 git stash
和 git stash pop
为此,但是我从修改的一堆文件中得到了很多冲突,但无论如何都不需要致力于父派。
是否有另一种方法可以避免冲突或以某种方式保存当前状态,并且仅将选择的工作树更改为另一个分支进行提交? (有点像Git-Stash-Cherry-Pick ;-))
解决方案
- 提交您想要的更改
master
在您当前的分支上。 - 存放您剩余的更改
- 切换到
master
分支并使用git cherry-pick
将更改移至master
- 回到您的羽毛分支,
rebase
(选修的) - 解开原始功能更改
其他提示
我通常会以相反的方式做。我继续在功能分支机构工作,直到准备在那里提交。一旦我,我将所有属于分支的新提交属于索引的更改,而不是属于主人的索引。 git add -p
et。使它变得非常容易。一旦索引中的所有相关更改,我就会致力于分支机构。所有剩下的剩余肮脏的变化都属于主,一旦我切换到它,就可以很好地携带,以便我可以在那里承担。
尝试切换回 master
分支使用 --merge
选项。它将尝试在两个分支之间进行三种合并。 GIT文档有一个很好的例子:
2. After working in the wrong branch, switching to the correct branch would be done using: $ git checkout mytopic However, your "wrong" branch and correct "mytopic" branch may differ in files that you have modified locally, in which case the above checkout would fail like this: $ git checkout mytopic error: You have local changes to 'frotz'; not switching branches. You can give the -m flag to the command, which would try a three-way merge: $ git checkout -m mytopic Auto-merging frotz After this three-way merge, the local modifications are not registered in your index file, so git diff would show you what changes you made since the tip of the new branch.
在MacOS上, Gitx 使RAFL描述的那种选择性的选择非常容易,因此,如果您是您所处的环境,这是处理它的好方法。
在单独提交中进行分支-y的更改和主-Y变化也是可能的/实用的,然后使用 git format-patch
以文件为文件,并将其导出 git am
将它们拉入大师。
这里的危险是,如果更改周围的文件太差异了,在这种情况下,将委托提交给主人时可能会发生冲突。
创建临时分支怎么样?
就像是:
- oh crap need to do somethning else now
- git checkout -b ResumeLater
- git add .
- git commit
- git checkout ImportantStuff
- ....
- git checkout ResumeLater
不隶属于 StackOverflow