2017-06-30 25 views
-1

時々、私はブランチを変更してからVisual Studio Codeを使ってコードを変更するのを忘れてしまいます。私は変更が行われた後に私の枝を変更しようとしましたが、「Git:以下のファイルのあなたのローカル変更はチェックアウトによって上書きされます。私が作業する必要があるブランチに変更をコミットするにはどうすればよいですか?必要があります:変更後にGitブランチを変更する

+3

'git stash'、ブランチをチェックアウトし、' git stash apply'を実行して、最後に通常のgitワークフローを実行します。 – t0mm13b

+1

適用された変更が正しいことが証明されたら、stashを 'git stash drop 'することを忘れないでください。 – torek

+0

@ t0mm13bそのトリックをした!ありがとう! –

答えて

3
git stash 
git checkout <existing branch> 
git stash apply 

これは、元のブランチで行った変更を受け取り、作成した新しいブランチに入れます。 -bフラグはすぐに新しいブランチに切り替えます。

編集:新しいブランチを作成する場合(git checkout -b <new branch>を使用)は、git stash/applyは不要です。あなたは隠しておくと適用されたときに、あなたの中に同様の編集がある場合は、マージ競合で終わる可能性があるため、

error: Your local changes to the following files would be overwritten by checkout: 
    README.md 
Please, commit your changes or stash them before you can switch branches. 
Aborting 

は注意してください:あなたはスタッシュせずに既存のブランチをチェックアウトしようとする場合は、次のようなメッセージが表示されますターゲットブランチ。

+2

'-b'オプションは、新しいブランチを作成する*ことを意味します。追加の引数がなければ、 'HEAD'にブランチを作成し、stashingは必要ありません。 OPには既存のブランチがあると思われるので、stash-and-no-'-b'バージョンが必要です。 – torek

+0

訂正していただき、ありがとうございました。 – McGlothlin

2

ここにはいくつかのメカニズムがあります。

ここで接線を外しましょう。関連性はさらに明らかになります。

チェリーピックを行うと、gitはあなたがチェリーピッキングしているコミットの変化を分析し、それらの変更を現在のコミットの上に適用します。

例として、あなたがチェリーピッキングしているコミットが、ファイルの下部または中央にいくつかの行を追加している場合、gitはコミットの上に全く同じことをしようとします。変更前のファイルが異なっていても、再起動します。

今、あなたがしようとしているところに戻ってみましょう。いくつかのファイルを変更しましたが、まだコミットしていないので、コミットする前にどのブランチを変更しようとしています。

孤立していると、gitが上記と同じことをする可能性があります。 gitはあなたが行った変更を特定し、それらをあなたがしたいブランチに持っていくことができます。

しかし、違いがあります。チェリー・ピックが変更をきれいに適用できない場合、マージの競合が発生します。このマージの競合を修正しようとして失敗した場合、中止できます。再起動して、やり直してください。

ただし、まだ変更をコミットしていないため、このようなマージの競合は、ジャムになった時点までの変更内容に深刻な影響を与える可能性があります。変更を失うことになるので、単にあなたが行ったことを放棄することはできません.gitは、マージ競合をあるポイントまで修正しようとすることによってファイルを真剣に妥協させました。

だから、gitはそれをしません。

コミットされていない変更があり、ブランチを切り替えようとすると、変更したファイルが2つのブランチ間で同じである場合にのみ実行できます。そうでない場合、gitは新しいブランチに切り替えることを単に拒否します。マージの競合が発生すると、ファイルに重大な損害を与える可能性があるからです。

  1. あなたはgit stashを行うことができますが、実際には、その後、変更のコミットブランチを切り替えて行い、その後、git stash popを行います。解決策は単純です

    、あなたは選択肢のカップルを持っています。これはgit cherry-pickとまったく同じことを行います。マージを再開することができます。再試行することができます。変更が失われないように問題が残っていることを知っているので、再試行できます。

  2. 実際のコミットを行い、ブランチを切り替えてからgit cherry-pickを実行してコミットを引き継ぐことができます。これは上記と同じことを行いますが、他のブランチもクリーンアップする必要があります。最終的な結果は同じでもかまいませんが、途中で正しいことをするためにあなたに負担がかかります。
+0

'git stash pop'は、' git stash apply'と 'git stash drop'の組み合わせと同じことをしますか? –

+1

@JacobRoberts:はい、 'pop' =' apply && drop':適用し、* Git *が結果が良いと思ったら、落としてください。それは大丈夫ですが、個人的には、結果が良いと思うようになるまで個人的に分けておくことを好みます。なぜならGitはうんざりだからです。 :-) – torek

関連する問題