別のブランチに変更を選択し、現在のブランチで作業を再開しますか?
-
28-09-2019 - |
質問
これは私のワークフローでしばしば起こります。私は別のブランチの機能に取り組んでいます。これを行うと、修正が必要ですが、たとえばフレームワークやサイトレイアウトの上位にある小さなことに出くわします。
メインに切り替えたいです 発展させる そこの選択したファイルからブランチとコミットをコミットしてから、 特徴 分岐して、無関係な調整/バグフィックスを邪魔にならないようにそこに続けることができるように、ブランズを回避します。
私は使用しています git stash
と git stash pop
これを行うために、しかし、私は私が変更した多くのファイルから多くの競合を得ていますが、とにかく親のブランチにコミットする必要はありません。
競合を回避したり、現在の状態を節約したり、選択した作業ツリーの変更を引き出して別のブランチに交代するための別の方法はありますか? (Git-Stash-Cherry-Pickのようなもの;-))
解決
- あなたが望む変更をコミットします
master
現在のブランチに。 - 残りの変更を隠します
- 切り替える
master
ブランチと使用git cherry-pick
変更をに移動しますmaster
- 羽の枝に戻り、
rebase
(オプション) - 元の機能の変更を解除します
他のヒント
私は通常、逆にそれをします。私はそこでコミットする準備ができるまで、私の機能ブランチで働き続けます。私がそうなるとすぐに、インデックスへのブランチの新しいコミットに属するすべての変更を追加しますが、マスターに属するものではありません。 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