16

これは私のワークフローでよく発生します。別のブランチで機能に取り組んでいます。これを実行しているときに、修正が必要な小さなものに出くわしますが、たとえば、フレームワークやサイトレイアウトの上位からのものです。

メインの開発ブランチに戻り、そこで選択したファイルから変更をコミットしてから、機能ブランチに戻ってリベースし、無関係な微調整やバグ修正を邪魔にならないように続けたいと思います。

私はこれを使用git stashgit stash popていますが、変更したファイルの束から多くの競合が発生していますが、とにかく親ブランチにコミットする必要はありません。

競合を回避する、または現在の状態を何らかの方法で保存し、選択した作業ツリーの変更のみを別のブランチにプルしてコミットする別の方法はありますか?(git-stash-cherry-pickのようなもの;-))

4

5 に答える 5

15
  1. master現在のブランチに必要な変更をコミットします。
  2. 残りの変更を隠します
  3. masterブランチに切り替えて、変更をに移動するために使用しgit cherry-pickますmaster
  4. フェザーブランチに戻り、rebase(オプション)
  5. 元の機能の変更をアンスタッシュします
于 2010-10-07T00:34:36.717 に答える
3

私は通常それを逆にします。コミットする準備ができるまで、機能ブランチで作業を続けます。すぐに、ブランチの新しいコミットに属するすべての変更をインデックスに追加しますが、マスターに属する変更は追加しません。git add -pet.alはそれを本当に簡単にします。インデックスに関連するすべての変更があったら、ブランチにコミットします。残りのダーティな変更はすべてマスターに属し、それに切り替えると問題なく実行されるので、そこでコミットできます。

于 2010-10-06T10:58:04.980 に答える
3

オプションmasterを使用してブランチに切り替えてみてください。--merge2つのブランチ間で3方向のマージを実行しようとします。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.
于 2010-10-07T00:30:46.413 に答える
2

MacOSでは、GitXを使用すると、raflが説明するような選択的なコミットを非常に簡単に実行できるため、現在の環境である場合は、GitXにアプローチするのに適した方法です。

また、branch-yの変更とmaster-yの変更を別々のコミットでgit format-patchコミットしてから、ブランチからコミットをファイルとしてエクスポートし、git amそれらをマスターにプルするために使用することも可能/実用的です。

ここでの危険は、変更に関連するファイルがあまりにも異なる場合です。その場合、コミットをマスターにプルするときに競合が発生する可能性があります。

于 2010-10-06T13:04:52.913 に答える
1

一時的なブランチを作成するのはどうですか?

何かのようなもの:

- oh crap need to do somethning else now
- git checkout -b ResumeLater
- git add .
- git commit
- git checkout ImportantStuff
- ....
- git checkout ResumeLater
于 2010-10-06T10:26:35.650 に答える