这通常发生在我的工作流程中:我正在一个单独的分支中处理一个功能,而在这样做的时候,我会遇到需要修复的小东西,但是在框架或站点布局中从较高的位置开始,例如
我想切换回主 develop 分支并从那里的select文件提交更改,然后返回功能分支,并重新绑定以便我可以继续那里有无关的调整/错误修正。
我正在使用git stash
和git stash pop
来执行此操作,但是我从一些我修改过但不需要提交到父分支的文件中获得了很多冲突反正。
是否有另一种方法可以避免冲突或以某种方式保存当前状态,并且只将选择工作树更改拉到另一个分支进行提交? (有点像git-stash-cherry-pick; - ))
答案 0 :(得分:14)
master
中提交所需的更改。master
分支并使用git cherry-pick
将更改移至master
rebase
(可选)答案 1 :(得分:2)
我通常以相反的方式做到这一点。我继续在我的功能分支中工作,直到我准备在那里进行提交。我一旦将所有属于分支的新提交的更改添加到索引中,而不是属于master的那些更改。 git add -p
et.al让这很容易。一旦索引中的所有相关更改,我就会致力于分支。所有剩余的剩余脏更改都属于master,一旦我切换到那个就会随身携带,所以我可以在那里提交。
答案 2 :(得分:2)
尝试使用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.
答案 3 :(得分:1)
在MacOS上,GitX可以很容易地进行rafl描述的那种选择性提交,所以如果这就是你所处的环境,这是一种很好的方法。
在单独提交中提交branch-y更改和master-y更改也是可行/实际的,然后使用git format-patch
将分支中的提交作为文件和git am
导出以将其提取到大师。
这里的危险是如果更改周围的文件太不相同,在这种情况下将提交提交到主服务器时可能会发生冲突。
答案 4 :(得分:0)
创建临时分支怎么样?
类似的东西:
- oh crap need to do somethning else now
- git checkout -b ResumeLater
- git add .
- git commit
- git checkout ImportantStuff
- ....
- git checkout ResumeLater