別のブランチに変更を選択し、現在のブランチで作業を再開しますか?

StackOverflow https://stackoverflow.com/questions/3871512

質問

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

メインに切り替えたいです 発展させる そこの選択したファイルからブランチとコミットをコミットしてから、 特徴 分岐して、無関係な調整/バグフィックスを邪魔にならないようにそこに続けることができるように、ブランズを回避します。

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

競合を回避したり、現在の状態を節約したり、選択した作業ツリーの変更を引き出して別のブランチに交代するための別の方法はありますか? (Git-Stash-Cherry-Pickのようなもの;-))

役に立ちましたか?

解決

  1. あなたが望む変更をコミットします master 現在のブランチに。
  2. 残りの変更を隠します
  3. 切り替える master ブランチと使用 git cherry-pick 変更をに移動します master
  4. 羽の枝に戻り、 rebase (オプション)
  5. 元の機能の変更を解除します

他のヒント

私は通常、逆にそれをします。私はそこでコミットする準備ができるまで、私の機能ブランチで働き続けます。私がそうなるとすぐに、インデックスへのブランチの新しいコミットに属するすべての変更を追加しますが、マスターに属するものではありません。 git add -p et.alはそれを本当に簡単にします。インデックスに関連するすべての変更が変更されたら、ブランチにコミットします。残っている残りの汚い変更はすべてマスターに属し、それに切り替えると正常に運ばれますので、そこでコミットできます。

に切り替えてみてください master 使用してブランチ --merge オプション。 2つのブランチ間で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.

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