web-dev-qa-db-ja.com

git:ブランチを切り替えてコミットせずに変更を無視する

私はgitブランチに取り組んでいて変更をコミットする準備ができていたので、役に立つコミットメッセージでコミットしました。それから私は不注意でコードにマイナーな変更を加えました。私は今枝を変えたいのですが、gitが私に与えてくれます、

エラー:あなたは "X"にローカルな変更を加えました。分岐を切り替えることはできません。

コミットせずにブランチを変更できると思いました。もしそうなら、どのように私はこれを設定することができますか?そうでなければ、どうやってこの問題から抜け出すことができますか?コミットせずに小さな変更を無視してブランチを変更するだけです。

277
Daniel Farrell

あなたは枝を変えるためにきれいな状態が必要です。ブランチチェックアウトは、 'ダーティファイル'に影響しない場合にのみ許可されます(コメントの Charles Bailey のコメント)。

それ以外の場合は、次のどちらかを実行してください。

  • あなたの現在の変更を隠す
  • reset --hard HEAD (あなたがそれらの小さな変更を失うことを気にしないのであれば)または
  • checkout -f (インデックスや作業ツリーがHEADと異なる場合でも、先に進みます。これはローカルの変更を捨てるために使われます。)
353
VonC

変更を破棄したい場合は、

git checkout -- <file>
git checkout branch

変更を維持したい場合は、

git stash save
git checkout branch
git stash pop
113
Jamie Macey

まあ、それは

git stash save
git checkout branch
// do something
git checkout oldbranch
git stash pop
59
romerun

フォロー

$: git checkout -f

$: git checkout next_branch
15
simplyharsh

リモートブランチをマージしたり、ローカルコミットをしていて、リモートHEADに戻りたい場合は、次の手順を実行する必要があります。

git reset --hard Origin/HEAD

HEADだけがローカルのコミット/マージのみを参照します - リセットして最終的に "リポジトリはXにコミットされています。ブランチ。

14
ccliffe

Gitがブランチを切り替えるときにも変更する必要があるファイルに変更を加えたとしても、それはできません。作業中の変更を破棄するには、次のようにします。

git reset --hard HEAD

そうすれば、ブランチを切り替えることができます。

8
Greg Hewgill

リセットして隠した後もファイルを追跡していなかったので、これらの答えのどれもが役に立ちませんでした。私がしなければなりませんでした:

git reset --hard HEAD
git clean -d -f
6

変更を失う新しいブランチへの切り替え:

git checkout -b YOUR_NEW_BRANCH_NAME --force

既存のブランチに切り替えて変更を失う

git checkout YOUR_BRANCH --force
3
Jorge Avila

端末を閉じて、プロジェクトのあるフォルダを削除してから、もう一度プロジェクトのクローンを作成してください。

2
miguelacio

変更を維持して1行のコマンドでブランチを変更したい場合

git stash && git checkout <branch_name> && git stash pop
2
Vinit Solanki

コミットされていない変更を新しいブランチに移動する

このために.gitconfigエイリアスを作成しました。

[alias]
spcosp = !"git stash Push && git checkout \"$@\" && git stash pop --index #"

new-branch-nameに変更するには、次のようにします。

git spcosp new-branch-name

コミットされていないファイルとインデックスの変更はすべて保持されます。

1
Tom Hale

簡単な回答:

ブランチのチェックアウトを強制することです

git checkout -f <branch_name>

ブランチを強制的にチェックアウトすることは、現在のブランチで行ったすべての変更をgitに落とし、希望のものをチェックアウトすることです。

またはコミットをチェックアウトしている場合

git checkout -f <commit-hash>


「コミットせずにブランチを変更できると思いました。もしそうなら、どうやってこれを設定できますか?そうでなければ、どうやってこの問題から抜け出すことができますか?」

その答えはいいえです。それは文字通りGitの哲学であり、すべての変更を追跡し、各ノード(すなわちコミット)はもちろん新しいコミットをしない限り、自分が行った最新の変更を反映しています。


あなたは変化を続けることに決めましたか?

それからそれらを使って隠します。

git stash

そして、目的のブランチであなたの変更を隠すには、

git stash apply

変更は適用されますが、stashキューにも保存されます。それらを隠しスタックにしたくない場合は、それらを使ってポップしてください。

git stash pop

それはapplyそしてそれに続くdropと同等です

0
Kareem Jeiroudi