Git ブランチとマスター インタラクションについて混乱してからの再投稿。
まだわかりません!
「miscChanges」という名前の 1 つのブランチがあり、いくつかのページに変更を加えました (まだコミットしていません)。ここで、「マスター」ブランチをチェックアウトしようとすると、「...ファイルが上書きされる」というメッセージが表示されます。チェックアウト。何とか何とか'。
完了していないため、「miscChanges」ブランチに変更をコミットしたくありません。
この場合、どのように処理するのが論理的ですか?
4 に答える
最初に変更をコミットする必要があります。git add -A
(新しいファイルと削除されたファイルを含む、現在のディレクトリ内のすべての変更を追加します) を試してから、 git commit
.
基本的に、git は、マスター ブランチをチェックアウトすると、作業ディレクトリ内のすべてのファイル (コミットされていない変更を含む) が上書きされることを警告しています。
ブランチは、既存のコミット IDへの単なるポインター (参照)です。現在のブランチを変更するということは、別のポインターを選択することを意味します。
これは、これらの変更を保存する場所がないため、コミットされていない変更が前のブランチにとどまらないことを意味します。そのため、ブランチを変更すると、git はこれらの変更を新しいコード ベースに保持しようとします。より具体的には、古いブランチで最後にコミットされた状態とは異なる作業ツリーのファイルは、チェックアウト後に作業ツリーに保持されます。しかし、これらのファイルが古いブランチと新しいブランチで異なる場合、git は互換性のない変更について文句を言います: 元のファイルが同じではないため、変更されたファイルを作業ツリーに保持できません。
これを解決するには、次の 3 つの方法があります。
- 後で破棄する一時的なコミットを行います。
git commit -a -m tmp
git checkout master
- ... マスターで作業を行います ...
git checkout miscChanges
git reset HEAD~
- 後で改善する一時的なコミットを行います。
git commit -a -m tmp
git checkout master
- ... マスターで作業を行います ...
git checkout miscChanges
- ... misChanges ブランチでさらに作業を行います ...
git commit --amend
- スタッシュを使用します:
git stash save 'work in progress on branch miscChanges'
git checkout master
- ... マスターで作業を行います ...
git checkout miscChanges
git stash pop
複数のスタッシュを保存する場合は、どれをポップするかを調べることができます:
git stash list
# Find the right stash number, in the form stash@{N}
git stash pop stash@{3}
まず、エラーメッセージが表示された理由に答えるために、gitでブランチをチェックアウトすると、ブランチの状態に一致するようにディスク上のファイルが変更されます。それはあなたが取り組んでいたことを上書きするので、それはあなたに警告しました。
次に、それについて何をすべきかを答えます。急いでいる場合は、「git stash」を実行するだけで、他のブランチを見ている間、変更を一時的に保存できます。(後でアンスタッシュする方法をグーグルで検索する必要があります。)それを処理するためのより完全な方法は、新しいブランチを作成し(思い出すと、 "git checkout -b new_branch")、マスターを見ながら変更をコミットすることです。 。その一時的なブランチをいつでもプルまたはマージしてmiscChangesに戻し、一時的なブランチを削除できます。
また、gitは分散ソース管理であることを忘れないでください。miscChangesブランチへの変更は、プッシュするまで他の人には表示されないため、技術的には、プッシュする前に不完全なものをコミットして修正できますが、履歴には機能が不完全な状態が含まれます。miscChangesに戻って、機能が終了したときに「git commit --amend ...」を実行すると、それを回避できる場合があります。
変更をまだコミットしたくない場合は、何かを行う必要があります。、ブランチを変更しgit stash
、必要なことをすべて実行してから、「miscChanges」ブランチに戻って実行できますgit stash apply