1. ホーム
  2. ギット

[解決済み】git stash -> 隠し持った変更を現在の変更にマージする

2022-04-09 23:21:52

質問

自分のブランチにいくつか変更を加えた後、そのブランチに他の必要な変更を隠しておいたのを忘れていることに気づきました。 そこで、隠した変更を現在の変更にマージする方法を教えてください。

このような方法はありますか?

私は最終的に諦めて、まず現在の変更をコミットし、次に隠した変更をコミットしましたが、一挙にコミットする方がよかったと思います。

解決方法は?

tl;dr

実行 git add を最初に表示します。


コミットされていない変更がインデックスに追加されている場合(つまり、"staged" を使用している場合)、私はちょうどそのことを発見しました。 git add ... を使用した場合) git stash apply (そして、おそらくは git stash pop ) は、実際に適切なマージを行います。コンフリクトがなければ問題ありません。 そうでない場合は、通常通り git mergetool または、エディタで手動で。

はっきり言って、このようなプロセスです。

mkdir test-repo && cd test-repo && git init
echo test > test.txt
git add test.txt && git commit -m "Initial version"

# here's the interesting part:

# make a local change and stash it:
echo test2 > test.txt
git stash

# make a different local change:
echo test3 > test.txt

# try to apply the previous changes:
git stash apply
# git complains "Cannot apply to a dirty working tree, please stage your changes"

# add "test3" changes to the index, then re-try the stash:
git add test.txt
git stash apply
# git says: "Auto-merging test.txt"
# git says: "CONFLICT (content): Merge conflict in test.txt"

...これは、おそらくあなたが探しているものです。