将选择更改提交到另一个分支然后恢复当前分支的工作?

时间:2010-10-06 10:21:58

标签: git branch branching-and-merging

这通常发生在我的工作流程中:我正在一个单独的分支中处理一个功能,而在这样做的时候,我会遇到需要修复的小东西,但是在框架或站点布局中从较高的位置开始,例如

我想切换回主 develop 分支并从那里的select文件提交更改,然后返回功能分支,并重新绑定以便我可以继续那里有无关的调整/错误修正。

我正在使用git stashgit stash pop来执行此操作,但是我从一些我修改过但不需要提交到父分支的文件中获得了很多冲突反正。

是否有另一种方法可以避免冲突或以某种方式保存当前状态,并且只将选择工作树更改拉到另一个分支进行提交? (有点像git-stash-cherry-pick; - ))

5 个答案:

答案 0 :(得分:14)

  1. 在当前分支上的master中提交所需的更改。
  2. 存储您剩余的更改
  3. 切换到master分支并使用git cherry-pick将更改移至master
  4. 移回羽毛分支,rebase(可选)
  5. 取消暂停原始功能更改

答案 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