私はgitブランチに取り組んでいて変更をコミットする準備ができていたので、役に立つコミットメッセージでコミットしました。それから私は不注意でコードにマイナーな変更を加えました。私は今枝を変えたいのですが、gitが私に与えてくれます、
エラー:あなたは "X"にローカルな変更を加えました。分岐を切り替えることはできません。
コミットせずにブランチを変更できると思いました。もしそうなら、どのように私はこれを設定することができますか?そうでなければ、どうやってこの問題から抜け出すことができますか?コミットせずに小さな変更を無視してブランチを変更するだけです。
あなたは枝を変えるためにきれいな状態が必要です。ブランチチェックアウトは、 'ダーティファイル'に影響しない場合にのみ許可されます(コメントの Charles Bailey のコメント)。
それ以外の場合は、次のどちらかを実行してください。
reset --hard HEAD
(あなたがそれらの小さな変更を失うことを気にしないのであれば)またはcheckout -f
(インデックスや作業ツリーがHEADと異なる場合でも、先に進みます。これはローカルの変更を捨てるために使われます。)変更を破棄したい場合は、
git checkout -- <file>
git checkout branch
変更を維持したい場合は、
git stash save
git checkout branch
git stash pop
まあ、それは
git stash save
git checkout branch
// do something
git checkout oldbranch
git stash pop
フォロー
$: git checkout -f
$: git checkout next_branch
リモートブランチをマージしたり、ローカルコミットをしていて、リモートHEADに戻りたい場合は、次の手順を実行する必要があります。
git reset --hard Origin/HEAD
HEAD
だけがローカルのコミット/マージのみを参照します - リセットして最終的に "リポジトリはXにコミットされています。ブランチ。
Gitがブランチを切り替えるときにも変更する必要があるファイルに変更を加えたとしても、それはできません。作業中の変更を破棄するには、次のようにします。
git reset --hard HEAD
そうすれば、ブランチを切り替えることができます。
リセットして隠した後もファイルを追跡していなかったので、これらの答えのどれもが役に立ちませんでした。私がしなければなりませんでした:
git reset --hard HEAD
git clean -d -f
変更を失う新しいブランチへの切り替え:
git checkout -b YOUR_NEW_BRANCH_NAME --force
既存のブランチに切り替えて変更を失う
git checkout YOUR_BRANCH --force
端末を閉じて、プロジェクトのあるフォルダを削除してから、もう一度プロジェクトのクローンを作成してください。
変更を維持して1行のコマンドでブランチを変更したい場合
git stash && git checkout <branch_name> && git stash pop
このために.gitconfig
エイリアスを作成しました。
[alias]
spcosp = !"git stash Push && git checkout \"$@\" && git stash pop --index #"
new-branch-name
に変更するには、次のようにします。
git spcosp new-branch-name
コミットされていないファイルとインデックスの変更はすべて保持されます。
ブランチのチェックアウトを強制することです
git checkout -f <branch_name>
ブランチを強制的にチェックアウトすることは、現在のブランチで行ったすべての変更をgitに落とし、希望のものをチェックアウトすることです。
またはコミットをチェックアウトしている場合
git checkout -f <commit-hash>
「コミットせずにブランチを変更できると思いました。もしそうなら、どうやってこれを設定できますか?そうでなければ、どうやってこの問題から抜け出すことができますか?」
その答えはいいえです。それは文字通りGitの哲学であり、すべての変更を追跡し、各ノード(すなわちコミット)はもちろん新しいコミットをしない限り、自分が行った最新の変更を反映しています。
それからそれらを使って隠します。
git stash
そして、目的のブランチであなたの変更を隠すには、
git stash apply
変更は適用されますが、stashキューにも保存されます。それらを隠しスタックにしたくない場合は、それらを使ってポップしてください。
git stash pop
それはapply
そしてそれに続くdrop
と同等です