这经常发生在我的工作流程中:我正在一个单独的分支中处理一个功能,而在这样做的同时,我会遇到需要修复的小东西,但从框架或站点布局中的更高范围内。

我想切换回主 发展 分支并提交从那里的选择文件更改,然后返回到 特征 分支,并重新构想,以便我可以继续使用无关的调整/错误框架继续前进。

我正在使用 git stashgit stash pop 为此,但是我从修改的一堆文件中得到了很多冲突,但无论如何都不需要致力于父派。

是否有另一种方法可以避免冲突或以某种方式保存当前状态,并且仅将选择的工作树更改为另一个分支进行提交? (有点像Git-Stash-Cherry-Pick ;-))

有帮助吗?

解决方案

  1. 提交您想要的更改 master 在您当前的分支上。
  2. 存放您剩余的更改
  3. 切换到 master 分支并使用 git cherry-pick 将更改移至 master
  4. 回到您的羽毛分支, rebase (选修的)
  5. 解开原始功能更改

其他提示

我通常会以相反的方式做。我继续在功能分支机构工作,直到准备在那里提交。一旦我,我将所有属于分支的新提交属于索引的更改,而不是属于主人的索引。 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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top