什么时候“git pull--rebase”会给我带来麻烦?

什么时候“git pull--rebase”会给我带来麻烦?,git,rebase,pull,Git,Rebase,Pull,我知道,当我使用git pull--rebase时,git将重新写入历史记录,并将本地提交移动到我刚才从中提取的分支中的所有提交之后发生 我不明白这怎么会是件坏事。人们常说git pull会给你带来麻烦——在那里你可以得到一个其他人无法使用的分支。但我不明白这是怎么可能的,因为你所做的只是在你从中提取的分支上重播你的本地(尚未公开)提交。那么,问题出在哪里呢?如果没有人从您那里退出,并且您没有将您的提交(在重新设置基础之前)推到任何其他地方,那么理论上您是可以的。然而,Git被设计为能够很好地处

我知道,当我使用git pull--rebase时,git将重新写入历史记录,并将本地提交移动到我刚才从中提取的分支中的所有提交之后发生


我不明白这怎么会是件坏事。人们常说git pull会给你带来麻烦——在那里你可以得到一个其他人无法使用的分支。但我不明白这是怎么可能的,因为你所做的只是在你从中提取的分支上重播你的本地(尚未公开)提交。那么,问题出在哪里呢?

如果没有人从您那里退出,并且您没有将您的提交(在重新设置基础之前)推到任何其他地方,那么理论上您是可以的。然而,Git被设计为能够很好地处理合并,如果您使用拉合并而不是拉合并并重新设置基础,您可能会发现总体工作量会减少。

如果您只发布(推送)了一些提交,这只是一个问题,因为这些提交很难合并到其他已经提交的回购。由于他们的SHA1发生了变化,Git将尝试在这些回购协议上再次重播它们

如果您没有(再次推送这些提交中的任何一个),那么任何重基都应该是安全的

所以这里的问题是:你确定你正在重定基址的所有本地提交实际上仍然是。。。本地?
你确定在“
git pull--rebase
”之后有“
git pull--rebase
”吗

如果您正在处理“私有分支”(您从未推动过的分支,但只合并或重新设置公共分支的基础,您将推动该分支),那么您可以随时安全地重新设置该私有分支的基础


最后,这完全取决于您选择的源代码。

请记住,Git是一个分布式的源代码控制系统。人们不必从您要推送到的中央存储库中提取更改—在某些工作流中,他们可以直接从您那里提取更改。在这些情况下,重写您的历史记录肯定会导致您所说的问题提交到分支。推合并到另一个分支(假设您正在维护两个基线,一个补丁分支和一个新的开发分支)。意识到其他提交已推送到您正在跟踪的服务器分支。拉——再基。突然间,你对新的散列进行了每一次提交,并销毁了合并提交。

不一定安全,
git pull--rebase
实际上可能会丢失它试图重新设置基址的提交,如果失败了。这里的失败是什么意思?@Marius:问得好(对于ben来说,但它在过去两个月一直在这里)。无论ben说的是什么失败,仍然有一个reflog来恢复您刚才重新设定的私有分支的原始提交。@ben:请参阅评论中的Marius问题。@djechlin本地回购可以有多个上游远程回购;如果您在执行
git pull--rebase
之前将这些提交推到了其他地方,那么您下一次推到上游回购将被强制执行。但即使只有一个上游回购,其想法是:如果你的一些承诺,即你正在重新定价,是你已经推动的另一个分支的一部分,那么这就是一个问题。您正在使用的分支(以及git pull--rebase)很好。其他分支没有,但不会使用选项“-preserve merges”来避免这种情况?不幸的是,它似乎无法在配置文件中配置。不确定它是否与“git pull--rebase”一起工作。我几分钟前就经历过这种情况。。。我们如何避免它呢?只需查看有关此类命令的手册
git pull--rebase=preserve
git config--global pull.rebase preserve
(如果需要,您可以跳过键
--global
),即使在这种情况下,也可以在接收端执行rabase以避免不一致。