Gitで次のことを行うにはどうすればよいですか?
現在のブランチは branch1 で、ローカルにいくつかの変更を加えました。しかし、実際にはこれらの変更を branch2 に適用するつもりだったことに気付きました。これらの変更を適用/マージして、branch1 でコミットせずに branch2 でローカルの変更になるようにする方法はありますか?
あなたのファイルはまだコミットされていないのでbranch1
:
git stash
git checkout branch2
git stash pop
また
git stash
git checkout branch2
git stash list # to check the various stash made in different branch
git stash apply x # to select the right one
上記は、 rbentoの回答のより明示的なバージョンです。
git stash
git stash branch branch2
それは使用しています:
git stash branch <branchname> [<stash>]
- が最初に作成され
<branchname>
たコミットから始まる名前の新しいブランチを作成してチェックアウトします。<stash>
- に記録された変更
<stash>
を新しい作業ツリーとインデックスに適用します。それが成功し
<stash>
、フォームの参照であるstash@{<revision>}
場合は、<stash>
.これは、実行したブランチ
git stash push
が変更さgit stash apply
れ、競合によって失敗する場合に役立ちます。
stash エントリは、git stash
実行時に HEAD であったコミットの上に適用されるため、競合することなく、元の stashed 状態を復元します。
benjohn のコメント( mangit stash
ページを参照):
現在追跡されていない (新しく追加された) ファイルも隠しておくには、引数 を追加します
-u
。
git stash -u
隠し場所、一時的なコミット、リベースはすべてやり過ぎかもしれません。変更したファイルをまだインデックスに追加していない場合は、他のブランチをチェックアウトできる可能性があります。
git checkout branch2
これは、編集しているファイルがbranch1とbranch2で異なっていない限り機能します。作業中の変更を保持したまま、branch2に残ります。それらが異なる場合は、ローカルの変更を、-m
チェックアウトのオプションを使用してブランチを切り替えることによって導入された変更とマージすることを指定できます。
git checkout -m branch2
インデックスに変更を追加した場合は、最初にリセットしてこれらの変更を元に戻す必要があります。(これにより、作業コピーが保持され、段階的な変更が削除されるだけです。)
git reset
受け入れられた答えの短い代替案は次のとおりです。
変更を一時的にスタッシュに移動します。
git stash
新しいブランチを作成して切り替え、スタッシュを 1 つのステップでそこにポップします。
git stash branch new_branch_name
次に、この新しいブランチへの変更add
のみです。commit
これらは私が従う手順です:
ステータスと使用しているブランチを確認できます。
注: ここで、新しいブランチに移動する前にローカル リポジトリに変更を加えた場合でも、次の手順は引き続き機能します。
「git branch」に master が表示されていて、作成して別のブランチに移動したい場合:
「git branch」を使用してブランチを再度確認すると、新しいブランチにいることが示されます。
次に、追加、コミット、およびプッシュします。
上記の手順は、新しいローカル ブランチに移動する前に変更を行った場合と、新しいブランチに移動した後に変更を行った場合の両方の状況で機能します。同様の状況に陥った人々の助けになれば幸いです。