我不明白git pull --rebase和git rebase之间的区别,没有任何其他选项。我不知道他们是安全的,一个好的做法,还是非常危险。我可以通过在本地执行git pull --rebase来中断提交历史吗?
git pull --rebase
git rebase
acruukt91#
我不建议重基,但只是为私人分支。我所说的“私有”是指你非常确定只有你拉过的分支。rebase将分支的起始点更改为某个较新的提交,从而将所有提交合并到该点。这可能会导致在其存储库中拥有旧分支库的人员发生合并冲突。我建议总是简单地合并,只在某些情况下(例如,特性分支)才使用rebase。关于你的问题:
*git rebaserebase你想要的分支。*git pull --rebase在你拉取的分支中执行fetch + rebase。通常情况下,pull会fetch + merge。
xriantvc2#
git pull --rebase是git fetch的简写,然后是普通的git rebase,与默认的git merge相反。实际上的区别是,只应用后者不会在将代码重定基到之上之前从远程执行任何新的提交,因为它只会考虑本地存储库已经知道的内容。还值得一提的是,合并冲突的出现方式与常规git pull相同。
git fetch
git merge
lrpiutwd3#
git rebase --onto <default_remote>/<current_branch> a <current_branch>
a
如果为true,则在获取后将当前分支的基重定在上游分支的顶部。如果存在对应于上游分支的远程跟踪分支,并且上游分支自上次获取以来被重定基,则重定基使用该信息来避免重定基非本地更改。
3条答案
按热度按时间acruukt91#
我不建议重基,但只是为私人分支。我所说的“私有”是指你非常确定只有你拉过的分支。
rebase将分支的起始点更改为某个较新的提交,从而将所有提交合并到该点。这可能会导致在其存储库中拥有旧分支库的人员发生合并冲突。我建议总是简单地合并,只在某些情况下(例如,特性分支)才使用rebase。
关于你的问题:
*git rebaserebase你想要的分支。
*git pull --rebase在你拉取的分支中执行fetch + rebase。通常情况下,pull会fetch + merge。
xriantvc2#
git pull --rebase
是git fetch
的简写,然后是普通的git rebase
,与默认的git merge
相反。实际上的区别是,只应用后者不会在将代码重定基到之上之前从远程执行任何新的提交,因为它只会考虑本地存储库已经知道的内容。还值得一提的是,合并冲突的出现方式与常规git pull相同。
lrpiutwd3#
git pull --rebase
和git rebase
之间的差异,并结合@noam-gal和@dnuttle的评论 ***简单情况:**如果上游的历史没有重写,
git pull --rebase
是git fetch
+git rebase
。高级情况:如果上游的历史被重写(例如由于已经推送的提交的变基或修改),
git pull --rebase
是git fetch
+远程分支上的本地更改的变基(即git rebase --onto <default_remote>/<current_branch> a <current_branch>
,其中a
是作为本地当前分支的父分支的最近上游提交)。这种方法的优点是,更改的上游提交不会导致与这些提交的旧版本冲突。参考资料
git pull --rebase
文档如果为true,则在获取后将当前分支的基重定在上游分支的顶部。如果存在对应于上游分支的远程跟踪分支,并且上游分支自上次获取以来被重定基,则重定基使用该信息来避免重定基非本地更改。