可以“自动拉”自动存储和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为我stashpop舞蹈吗?

如果这个命令有一个不同的名字,没关系。

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 gitstergitster -在提交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.autoStashconfigurationvariables,则无法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