Gitで現在の変更を別のブランチにコミットする方法 [重複] 質問する

Gitで現在の変更を別のブランチにコミットする方法 [重複] 質問する

時々、作業ディレクトリに変更を加えた後、これらの変更を現在のブランチとは別のブランチにコミットする必要があることに気付くことがあります。これは通常、新しいことを試したり、テストを実行したりしたいときに、事前に新しいブランチを作成するのを忘れたが、マスター ブランチにダーティ コードをコミットしたくない場合に発生します。

では、コミットされていない変更 (またはインデックスに保存されている変更) を現在のブランチとは別のブランチにコミットするにはどうすればよいでしょうか?

ベストアンサー1

他のブランチをチェックアウトしてからコミットすることを提案する他の回答は、ローカルの変更を考慮してチェックアウトが可能な場合にのみ機能します。そうでない場合は、次の最も一般的な使用例になりますgit stash

git stash
git checkout other-branch
git stash pop

最初のstashコミットは変更を非表示にし (基本的には一時的なコミットを作成)、その後はstash pop変更を再適用します。これにより、Git はマージ機能を使用できるようになります。

スタッシュをポップしようとしたときにマージ競合が発生した場合、次の手順は競合の内容によって異なります。スタッシュされた変更がすべて実際に他のブランチに属している場合は、それらを整理する必要があります。これは、間違ったブランチに変更を加えた結果です。

一方、本当にやらかしてしまい、作業ツリーに 2 つのブランチの変更が混在していて、競合が元のブランチにコミットしたいものだけにある場合は、作業を節約できます。いつものように、これを行う方法はたくさんあります。次に、ポップして競合を確認した後から始める方法の 1 つを示します。

# Unstage everything (warning: this leaves files with conflicts in your tree)
git reset

# Add the things you *do* want to commit here
git add -p     # or maybe git add -i
git commit

# The stash still exists; pop only throws it away if it applied cleanly
git checkout original-branch
git stash pop

# Add the changes meant for this branch
git add -p
git commit

# And throw away the rest
git reset --hard

あるいは、このようなことが起こることを事前に認識している場合は、現在のブランチに属するものをコミットするだけです。いつでも戻ってそのコミットを修正できます。

git add -p
git commit
git stash
git checkout other-branch
git stash pop

そしてもちろん、これは少し手間がかかったことを覚えておいてください。次回は、プロンプトに現在のブランチ名を追加して$(__git_ps1)プレイステーション1環境変数.bashrc ファイルファイルを参照してください。(例えば、Bash での Gitドキュメンテーション。)

おすすめ記事