什么是两者之间的区别?
git pull --rebase
git stash
git pull
git stash pop
我建议您创建一个实验性的仓库并尝试这些命令。自己尝试可以使学习更加容易。
您会注意到命令序列 git stash; git pull; git stash pop
会将未提交的更改移动到主分支更新后的头部。(它还会执行普通合并,因此假定默认的 gitconfig,提交的更改将被合并而不是变基)
然而,git pull -rebase
会将已经提交的更改移动到主分支更新后的头部。如果您尝试在有脏工作树的情况下运行此命令,则会看到错误消息:
Cannot pull with rebase: You have unstaged changes.
Please commit or stash them.
git pull --rebase --autostash
git pull --rebase
和git pull
之间的区别在于,前者执行fetch
+ rebase
,后者执行fetch
+ merge
,除非您有一个非默认的git配置告诉git pull
执行rebase
而不是合并。在这种情况下,这两个命令将是相同的。我知道这是一篇一年前的帖子,但是...
git pull --rebase
~ vs ~
git stash /git pull /git stash pop
git pull --rebase
是两者之间的一种混合方式。它将允许您保留自己的提交,并从中央仓库拉取最近提交(推送)的文件。有点像时间旅行,伙计...爆炸声
但是为了回答这个问题.... Git stash
保留未提交的更改,然后在拉取完成后将其放回。
所以 - 如果你还没有完全完成某件事,但需要中央仓库中最新的文件,你应该:
git stash
git pull
git stash pop
然而,假设你已经完成了某件事,并进行了提交 - 但是你的同事Timmy从来不告诉任何人东西,他提交了文件并将它们推送到主(中央)仓库,那么你应该先获取他的文件,然后添加你的提交到堆栈中,并推送它们..
如果您已经进行了提交,但尚未将更改推送到主(中央)仓库,并且必须获取中央仓库中的新文件,因为另一个开发人员已经提交并推送了他们的文件 - 您将使用:
git pull --rebase
就像当你做汉堡时,忘记尝试你的朋友想让你尝试的自制奶酪一样,于是他拿着你的奶酪片来了,你不得不把上面的面包卷下来涂上这个奶酪,然后再把面包卷回去 - 奶酪汉堡。
git pull:实际上你正在发出git fetch + git merge命令,这将在你的提交日志中产生额外的提交和难看的合并气泡。
git pull --rebase:为了保持代码库的清洁,你的提交始终在树的顶部,直到你将它们推送到远程服务器。该命令将所有尚未推送的提交应用于远程树提交的顶部,使您的提交成为一行直线而没有分支。
git stash --include-untracked
吗? - Nicolai Weitkemper