可以“自动拉”自动存储和popup挂起更改?
我知道如何解决这个问题:
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
创build一个shell别名git stash; git pull; git stash pop
git stash; git pull; git stash pop
git stash; git pull; git stash pop
是一个解决scheme,但我寻找更好的解决scheme。
对于Git 2.6+(2015年9月28日发布)
唯一感兴趣的git config
设置是:
rebase.autoStash
设置为true时,在操作开始之前自动创build临时存储器,并在操作结束后应用。
这意味着你可以在肮脏的工作树上运行rebase。但是,谨慎使用:成功重新绑定后的最终隐藏应用程序可能会导致不小的冲突。 默认为false。
结合:
pull.rebase
如果为true,则rebase分支位于提取分支的顶部,而不是在运行“git pull”时合并默认分支。
git config pull.rebase true git config rebase.autoStash true
即使在一棵肮脏的树上,这对于一个简单的git pull
也足够了。
在这种情况下不需要别名。
见Kevin Daudt(Ikke )的commit 53c76dc (2015年7月4日) 。
(合并由Junio C gitster
– gitster
-在提交e69b408 ,2015年8月17日)
pull
:启用rebase.autostash
时允许脏树学习rebase当它遇到一个肮脏的工作树存储变化,但
git pull --rebase
不。只有在未启用
rebase.autostash
时validation工作树是否脏。
注意:如果你想在没有自动存储的情况下拉动(即使设置了rebase.autoStash true
),你已经有了git 2.9(2016年6月):
pull --rebase --no-autostash
见Mehul Jain( mehul2029
) 提交450dd1d , 提交1662297 , 提交44a59ff , 提交5c82bcd , 提交6ddc97c , 提交eff960b , 提交efa195d (2016年4月2日),并提交f66398e , 提交c48d73b (2016年3月21日) 。
(由Junio C gitster
合并- gitster
-在承诺7c137bb ,2016年4月13日)
提交f66398e尤其包括:
pull --rebase
:添加--[no-]autostash
标志如果设置了
rebase.autoStash
configurationvariables,则无法git pull --rebase
覆盖“git pull --rebase
”。教“
git pull --rebase
”--[no-]autostash
覆盖rebase.autoStash
的当前值(如果设置)的--[no-]autostash
命令行标志。 由于“git rebase
”理解了--[no-]autostash
选项,当“git pull --rebase
”被调用时,只是将选项传递给底层的“git rebase
”。
警告:在Git 2.14(2017年第3季度)之前,当本地历史快速向上游转时,“ git pull --rebase --autostash
”不会自动git pull --rebase --autostash
。
参见Tyler Brazier( tylerbrazier
)的 commit f15e7cf (2017年6月1日) 。
(由Junio C gitster
合并- gitster
-在承诺35898ea ,2017年6月5日)
pull
:ff--rebase --autostash
在脏回购中工作当
git pull --rebase --autostash
在一个肮脏的仓库导致快进,没有被自动处理和拉失败。
这是由于我们可以快进时避免运行rebase的快捷方式,但是autostash在该代码path上被忽略。
正如上面的评论所述,设置两个configuration值目前不能用于git pull
,因为autostashconfiguration只适用于实际的rebase。 这些git命令做你想做的事情:
git fetch git rebase --autostash FETCH_HEAD
或者将其设置为别名:
git config alias.pullr '!git fetch; git rebase --autostash FETCH_HEAD'
然后做:
git pullr
当然,这个别名可以根据需要重新命名。
为迎接未来探险者节省几秒钟,下面是一个总结(感谢@VonC):
git pull --rebase --autostash
使用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
(从上面),以防万一快进合并是不可能的或存在变化。
正如你已经提到的,这是做到这一点的方法。 你可以在别名中使用它来保存你的input和使用快捷方式,或者你可以在一行中使用它(也可以是一个别名)
git stash && git pull --rebase && git stash pop
它会做和你一样的事情,但在一行(&&),你被设置为别名,甚至会更短。
下拉线将在您拉/推之前显示传入/传出的变化
git log ^master origin/master git log master ^origin/master