web-dev-qa-db-ja.com

「git pull」は保留中の変更を自動的に隠してポップできますか?

私はこれを解決する方法を知っています:

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 pullstashpopを踊らせる方法はありませんか?

このコマンドに別の名前が付いていても問題ありません。

git stash; git pull; git stash popのシェルエイリアスを作成することは解決策ですが、より良い解決策を探しています。

103
guettli

近づいてくる探検家のために数秒を節約するために、ここに要約があります(@VonCに感謝):

git pull --rebase --autostash
27

上記のコメントで述べたように、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

もちろん、このエイリアスは必要に応じて名前を変更できます。

14
user397114

Git 2.6+では、次を使用できます。

alias gup='git -c rebase.autoStash=true pull --rebase'

この--rebaseはgit-pullがrebaseの代わりにmergeを使用するようにするため、--ff-onlyなどの設定/オプションは適用されません。

エイリアスを使用して、デフォルトで--ff-onlygit pull --ff-only)を使用してプルします。その後、早送りマージが不可能な場合や隠されている場合にgup(上から)を使用できます変更。

6
blueyed

既に述べたように、これがその方法です。エイリアスでそれを使用して入力を保存し、ショートカットを使用するか、単一行で使用することができます(エイリアスも可能です)

git stash && git pull --rebase && git stash pop

これはあなたがしたことと同じことをしますが、1行(&&)で、エイリアスとして設定するとさらに短くなります。

次の行は、プル/プッシュする前に着信/発信の変更を表示します

git log ^master Origin/master
git log master ^Origin/master
1
CodeWizard