この質問の短いバージョンは次のとおりgit
です。自動マージをトリガーせずにスタッシュをポップするにはどうすればよいですか?
ではロングバージョンを…
に代わる次のおもちゃの例を考えてみましょうgit stash ... + git pull ... + git pop
。
まず、git status
作業ディレクトリでの唯一の変更は、追跡されたファイルへの変更であることを示していますfoo
。
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: foo
#
no changes added to commit (use "git add" and/or "git commit -a")
ここで、作業ディレクトリをクリーンな状態にリセットするために、 を実行するための前提条件として、git pull
変更したファイルの名前を一時的にfoo
(追跡されていない名前に) 変更し、 のバージョンを復元foo
しHEAD
ます ...
% mv foo foo.$(date +%Y%m%dT%H%M%S)
% git checkout foo
% git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# foo.20130508T110014
nothing added to commit but untracked files present (use "git add" to track)
では、 を実行しますgit pull
。この例のために、これは早送りであると想定できます。
% git pull
最後に、一時的に名前を変更した を元に戻しfoo
ます。
% mv foo.20130508T110014 foo
...そして私は戻ってきました
% git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: foo
#
これは a の「道徳的同等物」ですがgit stash save + git pull + git stash pop
、後者ではなく前者が次のように「マージ競合」の影響を受けないことを除きます。
% git stash save 'WIP'
% git pull
% git stash pop
Auto-merging foo
CONFLICT (content): Merge conflict in foo
自動マージをトリガーせずに、をrename-checkout-pull-rename
使用して上記のシーケンスを複製するにはどうすればよいですか?git stash save + ... + git stash pop
ちなみに、このrename-checkout-...-rename
ルーチンは、私が というコマンドに期待するものをより厳密に表していstash
ます。つまり、作業ディレクトリの状態を今保存し、後で置き換えます。この写真には「融合」はありません。