私はブランチAに取り組んでいますが、機能/タスクは完了していません。次に、簡単な修正のために別のブランチBに切り替える必要があります。別のブランチに切り替えようとすると、Git によってローカルの変更を保存するように強制されます。そうしないと、すべてのローカルの変更が失われます。
不完全なコードをコミットする必要があります。コードをコミットして失うことなく、複数のブランチを切り替える方法はありますか? または、状況を処理するためのより良い方法はありますか?
私はブランチAに取り組んでいますが、機能/タスクは完了していません。次に、簡単な修正のために別のブランチBに切り替える必要があります。別のブランチに切り替えようとすると、Git によってローカルの変更を保存するように強制されます。そうしないと、すべてのローカルの変更が失われます。
不完全なコードをコミットする必要があります。コードをコミットして失うことなく、複数のブランチを切り替える方法はありますか? または、状況を処理するためのより良い方法はありますか?
mipadi が示すように、1 つのオプションは、単純に を使用することgit stash
です。
別のオプションは、現在進行中の作業を単純にコミットし、ブランチを切り替えてから、元に戻す準備ができたら、以前のコミットに混合リセットを行うことです。
# While working on "feature" branch,
# you suddenly need to go work on a hotfix:
$ git commit --all --message "Backup my feature work"
$ git checkout -b hotfix master
# You did your hotfix, and are ready to go back to feature
$ git checkout feature
$ git reset HEAD^
git reset HEAD^
バックアップコミットを行う前に混合リセットをコミットに戻し、バックアップコミットで行ったすべての変更が作業コピーに復元されます。(強調鉱山)の公式Linuxカーネルドキュメントから:git reset
インデックスをリセットしますが、作業ツリーはリセットしません (つまり、変更されたファイルは保存されますが、 commit のマークは付けられません)。何が更新されていないかを報告します。これがデフォルトのアクションです。
を使用するgit stash
と、コミットを作成せずに変更を保存できます。1
まず、変更を隠します。
$ git stash
次に、他のブランチに切り替えます。
$ git checkout branch-B
読んでいるときは、元のブランチに戻って変更を unstash します。
$ git checkout branch-A
$ git stash pop
その他の使用例の詳細と仕様については、上記のリンク先のドキュメントを参照してください。
1技術的にはコミットを作成しますが、git stash
いくつかの魔法を使用するため、実際にはコミットが表示されず、Git のツールはこれらの疑似コミットを適切に処理する方法を知っています。