私はこれを解決する方法を知っています:
user@Host$ git pull
Updating 9386059..6e3ffde
error: Your local changes to the following files would be overwritten by merge:
foo.bar
Please, commit your changes or stash them before you can merge.
Aborting
しかし、git pull
にstash
とpop
を踊らせる方法はありませんか?
このコマンドに別の名前が付いていても問題ありません。
git stash; git pull; git stash pop
のシェルエイリアスを作成することは解決策ですが、より良い解決策を探しています。
近づいてくる探検家のために数秒を節約するために、ここに要約があります(@VonCに感謝):
git pull --rebase --autostash
上記のコメントで述べたように、autostash構成は実際のリベースにのみ適用されるため、2つの構成値の設定はgit pull
では現在機能しません。これらのgitコマンドはあなたが望むことをします:
git fetch
git rebase --autostash FETCH_HEAD
または、エイリアスとして設定します。
git config alias.pullr '!git fetch; git rebase --autostash FETCH_HEAD'
それから:
git pullr
もちろん、このエイリアスは必要に応じて名前を変更できます。
Git 2.6+では、次を使用できます。
alias gup='git -c rebase.autoStash=true pull --rebase'
この--rebase
はgit-pullがrebase
の代わりにmerge
を使用するようにするため、--ff-only
などの設定/オプションは適用されません。
エイリアスを使用して、デフォルトで--ff-only
(git pull --ff-only
)を使用してプルします。その後、早送りマージが不可能な場合や隠されている場合にgup
(上から)を使用できます変更。
既に述べたように、これがその方法です。エイリアスでそれを使用して入力を保存し、ショートカットを使用するか、単一行で使用することができます(エイリアスも可能です)
git stash && git pull --rebase && git stash pop
これはあなたがしたことと同じことをしますが、1行(&&)で、エイリアスとして設定するとさらに短くなります。
次の行は、プル/プッシュする前に着信/発信の変更を表示します
git log ^master Origin/master
git log master ^Origin/master