372

私は git ブランチで作業していて、変更をコミットする準備ができていたので、便利なコミット メッセージでコミットを行いました。その後、保持する価値のない小さな変更をぼんやりとコードに加えました。ブランチを変更したいのですが、git は私に、

エラー: "X" にローカルな変更があります。ブランチを切り替えることはできません。

コミットせずにブランチを変更できますか? もしそうなら、どうすればこれを設定できますか?そうでない場合、どうすればこの問題から抜け出すことができますか? コミットせずにマイナーな変更を無視して、ブランチを変更したいだけです。

4

16 に答える 16

480

ブランチを変更するには、クリーンな状態が必要です。ブランチチェックアウトは、「ダーティファイル」に影響を与えない場合にのみ許可されます(Charles Baileyがコメントで述べているように)。

それ以外の場合は、次のいずれかを行う必要があります。

  • 現在の変更を隠しておくか、
  • reset --hard HEAD (これらの小さな変更を失ってもかまわない場合)または
  • checkout -f(ブランチを切り替えるときは、インデックスまたは作業ツリーがHEADと異なっていても続行します。これは、ローカルの変更を破棄するために使用されます。)

または、最近:

インデックスまたは作業ツリーがHEADと異なる場合でも続行します。
インデックスと作業ツリーの両方が、スイッチングターゲットに一致するように復元されます。

これは、現在のブランチ、作業ツリーの内容、および新しいブランチの間で3方向のマージをトリガーする、とは異なりgit switch -m <branch-name>ます。その方法で進行中の作業が失われることはありません。

于 2009-08-20T08:02:06.170 に答える
143

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

git checkout -- <file>
git checkout branch

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

git stash save
git checkout branch
git stash pop
于 2009-08-20T19:29:18.793 に答える
71

まあ、そうあるべきだ

git stash save
git checkout branch
// do something
git checkout oldbranch
git stash pop
于 2009-10-11T08:48:17.453 に答える
25

従う、

$: git checkout -f

$: git checkout next_branch
于 2009-08-20T08:02:25.873 に答える
18

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

git reset --hard origin/HEAD

HEAD単独では、ローカルのコミット/マージのみを参照します-すべての変更/コミットを完全に破棄してリモートブランチに戻るつもりだったときに、リセットして「your repository is X commits ahead..」になってしまうことを何度か忘れました.

于 2011-08-03T15:17:11.920 に答える
9

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

git reset --hard HEAD

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

于 2009-08-20T08:01:15.470 に答える
9

git checkout -f your_branch_name

git checkout -f your_branch_name

変更を元に戻すのに問題がある場合:

git checkout .

追跡されていないディレクトリとファイルを削除する場合:

git clean -fd
于 2020-02-24T16:30:00.720 に答える
6

次の手順を実行します:

  1. Git stash save は、ブランチを切り替えてもすべての変更を保存します。
git stash save
  1. Git で他のブランチをチェックアウトします。変更を保存したので、任意のブランチを移動できます。上記のコマンドにより、変更が確実に保存されます。
git checkout branch
  1. ブランチに戻ったら、このコマンドを使用してすべての変更を元に戻します。
git stash pop
于 2020-07-17T07:43:28.797 に答える
2

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

.gitconfigこのエイリアスを作成しました:

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

に変更するにnew-branch-nameは、次を使用します。

git spcosp new-branch-name

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

于 2019-06-08T09:43:34.247 に答える