11

私はブランチAに取り組んでいますが、機能/タスクは完了していません。次に、簡単な修正のために別のブランチBに切り替える必要があります。別のブランチに切り替えようとすると、Git によってローカルの変更を保存するように強制されます。そうしないと、すべてのローカルの変更が失われます。

不完全なコードをコミットする必要があります。コードをコミットして失うことなく、複数のブランチを切り替える方法はありますか? または、状況を処理するためのより良い方法はありますか?

4

3 に答える 3

16

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 のマークは付けられません)。何が更新されていないかを報告します。これがデフォルトのアクションです。

于 2013-08-06T06:52:31.733 に答える
12

を使用するgit stashと、コミットを作成せずに変更を保存できます。1

まず、変更を隠します。

$ git stash

次に、他のブランチに切り替えます。

$ git checkout branch-B

読んでいるときは、元のブランチに戻って変更を unstash します。

$ git checkout branch-A
$ git stash pop

その他の使用例の詳細と仕様については、上記のリンク先のドキュメントを参照してください。


1技術的にはコミットを作成しますが、git stashいくつかの魔法を使用するため、実際にはコミットが表示されず、Git のツールはこれらの疑似コミットを適切に処理する方法を知っています。

于 2013-08-06T06:35:18.177 に答える