32

git-checkoutデータを上書きせずにどうすればよいですか?

走る

 git checkout master

私は得る

error: Entry 'forms/answer.php' would be overwritten by merge. Cannot merge.

これは驚くべきことです。なぜなら、私がGitがマージすることを知らなかったからgit-checkoutです。私はいつもコマンドの後に別々に実行しましたgit merge new-feature。Gitがチェックアウト時にマージする場合、これは明らかに不要のようです。

4

4 に答える 4

59

Gitは、forms/answers.phpの作業コピーまたはインデックスにコミットされていない変更があることを警告しています。

git-stashを使用して変更を保存してから、git-stashを適用して変更を復元できます。

git-stashの一般的な使用例は、変更に取り組んでいるが、バグ修正を行うために一時的に別のブランチをチェックアウトする必要がある場合です。したがって、インデックスと作業コピーに変更を隠し、他のブランチをチェックアウトし、バグ修正を行い、コミットし、元のブランチをチェックアウトし、git-stashを適用て、変更を復元し、中断したところから再開できます。

于 2009-08-18T02:21:31.143 に答える
19

Gitは、ブランチを切り替えるときに(を使用して)コミットされていない変更git checkout <branch>の双方向マージを実行しますが、通常は些細な(ツリーレベルの)マージのみを実行します。

git-stash Karl Voigtlandによる解決策に加えて、次のオプションのいずれかを選択して、 gitcheckoutに追加のオプションを与えることができます。

  • コミットされていない変更を/オプションで切り替えるブランチにマージするように頑張るようにgitに指示します。このオプションを使用すると、現在のブランチ、作業ツリーの内容、および新しいブランチの間の3方向のマージが実行され、新しいブランチに移動します。-m--merge

  • コミットされていない変更を上書きし、オプションでローカルの変更を破棄するようにgitに指示し-fます。警告:コミットされていない変更は失われます!

于 2009-08-18T09:26:30.693 に答える
2

git reset --soft新しいブランチをポイントするためにを行うことができますが、HEADすべてのファイル(新しいブランチで変更されたファイルを含む)はそのままにしておきます。次にgit checkout、新しいブランチから本当に必要なファイルだけをチェックアウトするために使用できます。

       git reset [<mode>] [<commit>]
           This form resets the current branch head to <commit> and possibly updates the index (resetting it to the
           tree of <commit>) and the working tree depending on <mode>. If <mode> is omitted, defaults to --mixed.
           The <mode> must be one of the following:

           --soft
               Does not touch the index file or the working tree at all (but resets the head to <commit>, just like
               all modes do). This leaves all your changed files "Changes to be committed", as git status would put
               it.
于 2019-05-26T09:20:49.143 に答える
0

Jakubも言及していますgit checkout --mergeが、執筆時点では、このオプションをお勧めしません。私の場合、「エラー:ダーティインデックス:マージできません」で失敗し、隠し場所などにバックアップせずに、作業中のコピー全体を破棄しました。使用せず、代わりに従来の隠し場所を使用してください。

于 2021-05-11T18:17:12.490 に答える