回答:
git stash
あなたの友だちです。
まだコミットしていない場合は、を実行してくださいgit stash
。これにより、すべての変更が保存されます。
変更したいブランチに切り替えて実行しgit stash pop
ます。
git stashには多くの用途があります。これは確かに、より有用な理由の1つです。
例:
# work on some code
git stash
git checkout correct-branch
git stash pop
C:\kf [develop +0 ~4 -0]> git checkout feature/customers<br/> error: Your local changes to the following files would be overwritten by checkout:<br/> AspWebApp.vNext/global.asa<br/> RestApi/Web.config<br/> Please, commit your changes or stash them before you can switch branches.<br/> Aborting
まだ変更をコミットしていない場合は、を使用git checkout
して新しいブランチに移動し、通常どおりにコミットします。ファイルへの変更は、コミットするまで特定のブランチに関連付けられません。
すでに変更をコミットしている場合:
git log
移動するコミットのSHAを入力して覚えます。git cherry-pick SHA
上からSHAを置き換えて入力します。git reset HEAD~1
間違ったブランチのコミットの前にリセットするために使用します。cherry-pick
指定されたコミットを取得して、現在チェックアウトされているヘッドに適用するため、コミットを新しいブランチにコピーできます。
git reset HEAD~N --soft
その後、git checkout -b
すべて移動し、今新しいブランチにコミットされていないコードを。
悲しいことにこれはかなり頻繁に私にも起こります、そして私がgit stash
前に私の間違いに気づいたら私は使用し、そうでなければgit commit
使用しgit cherry-pick
ます、両方のコマンドは他の答えでかなりよく説明されています
説明を追加したいのですgit checkout targetBranch
。このコマンドは、targetBranchに現在のブランチと同じ履歴がある場合にのみ、作業ディレクトリとステージングされたスナップショットを保持します
まだ変更をコミットしていない場合は、git checkoutを使用して新しいブランチに移動し、通常どおりコミットします。
@Amberのステートメントはfalseではありません。newBranchに移動するgit checkout -b newBranch
と、新しいポインターが作成され、現在のブランチとまったく同じコミットを指します。
実際、たまたま現在のブランチと履歴を共有している別のブランチがある場合(両方とも同じコミットで)、次のようにして「変更を移動」できます。git checkout targetBranch
ただし、通常、異なるブランチは異なる履歴を意味します。Gitでは、ダーティな作業ディレクトリまたはステージング領域を持つこれらのブランチを切り替えることはできません。その場合git checkout -f targetBranch
(クリーンで使い捨ての変更)またはgit stage
+ git checkout targetBranch
(クリーンで変更を保存)のいずれかを実行でき、単に実行git checkout targetBranch
するとエラーが発生します。
エラー:次のファイルに対するローカルの変更はチェックアウトによって上書きされます:...ブランチを切り替える前に、変更をコミットするか、それらを隠してください。中止しています
ソフトgitのリセットは、コミットされた変更は、あなたのインデックスに戻されます。次に、コミットする予定のブランチをチェックアウトします。次に、新しいコミットメッセージでgit commitを実行します。
git reset --soft <commit>
git checkout <branch>
git commit -m "Commit message goes here"
git docsから:
git reset [<mode>] [<commit>]
このフォームは、現在のブランチヘッドをにリセットし、場合によってはインデックス(のツリーにリセットする)と作業ツリーを更新します。省略した場合のデフォルトは--mixedです。は次のいずれかである必要があります。
--soft
インデックスファイルや作業ツリーにはまったく触れません(ただし、すべてのモードと同様に、ヘッドをにリセットします)。これにより、変更されたすべてのファイルが「コミットされる変更」のままになります。