スタッシュを逆に適用するにはどうすればいいですか? 質問する

スタッシュを逆に適用するにはどうすればいいですか? 質問する

小さなパッチを Git スタッシュに保存しています。 を使用して、それを作業コピーに適用しました。ここで、パッチを逆に適用して、それらの変更を元に戻したいと思います (スタッシュに対して行うgit stash applyことと似ています)。git revert

誰かこれをどうやってやるのか知っていますか?

説明:作業コピーには他の変更も含まれています。私の特定のケースを説明するのは難しいですが、スタッシュにデバッグ コードや実験コードが含まれていることは想像できます。現在、作業コピーでは他の変更と混在しており、スタッシュからの変更の有無による影響を確認したいと思います。

現時点では stash はこれをサポートしていないようですが、git stash apply --reverse便利な機能になるでしょう。

ベストアンサー1

によるgit-stash マニュアルページ「スタッシュは、そのツリーが作業ディレクトリの状態を記録し、その最初の親がHEADスタッシュが作成された時点のコミットであるコミットとして表されます」そして、git stash show -p「スタッシュに記録された変更は、スタッシュされた状態と元の親との差分として提供されます。」

その他の変更をそのまま維持するには、git stash show -p | patch --reverse次のように使用します。

$ git init
Initialized empty Git repository in /tmp/repo/.git/

$ echo Hello, world >messages

$ git add messages

$ git commit -am 'Initial commit'
[master (root-commit)]: created 1ff2478: "Initial commit"
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 messages

$ echo Hello again >>messages

$ git stash

$ git status
# On branch master
nothing to commit (working directory clean)

$ git stash apply
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   messages
#
no changes added to commit (use "git add" and/or "git commit -a")

$ echo Howdy all >>messages

$ git diff
diff --git a/messages b/messages
index a5c1966..eade523 100644
--- a/messages
+++ b/messages
@@ -1 +1,3 @@
 Hello, world
+Hello again
+Howdy all

$ git stash show -p | patch --reverse
patching file messages
Hunk #1 succeeded at 1 with fuzz 1.

$ git diff
diff --git a/messages b/messages
index a5c1966..364fc91 100644
--- a/messages
+++ b/messages
@@ -1 +1,2 @@
 Hello, world
+Howdy all

編集:

これを少し改善するには、git applyパッチの代わりに以下を使用します。

git stash show -p | git apply --reverse

git apply -Rあるいは、の省略形として使用することもできますgit apply --reverse

最近、これが本当に便利だと感じています...

おすすめ記事