如果不再使用本地分支,我应该使用 `git pull --rebase origin master` 还是 `git rebase origin/master`?

Posted

技术标签:

【中文标题】如果不再使用本地分支,我应该使用 `git pull --rebase origin master` 还是 `git rebase origin/master`?【英文标题】:Should I use `git pull --rebase origin master` or `git rebase origin/master` if the local branch won't be used anymore? 【发布时间】:2022-01-15 19:09:44 【问题描述】:

据我了解

git pull --rebase origin master

等价于

git fetch origin
git rebase origin/master

所以如果我们只是简单地使用git rebase origin/master 而不是git pull --rebase origin master,唯一的区别是来自远程主分支的任何新提交都不会到达我们的本地分支吗?或者是否有我需要注意的极端情况?

假设,如果我们要做的只是变基并且不再与当前本地分支一起工作,那么是否需要合并git fetch origin 步骤?

【问题讨论】:

“不适用于当前本地分支”?但是如果你变基,你会保留你的本地分支。如果你想放弃它,你根本不必重新设置它,只需切换到不同的分支。请澄清。 是的,您的请求无法计算。如果您不使用本地分支,为什么还要费心重新设置/更新它?还是您所说的“本地分支”实际上是指本地 master 并且您想放弃对它的本地提交? origin/master 是您的 Git 存储库如何记住 他们的 存储库的 master。随着他们的存储库获得新的提交,它会过时,因此您必须不时使用git fetch origin 刷新它:您的 Git 软件在您的存储库上运行,调用他们的 Git 软件,将其定向到他们的存储库。你的 Git 会得到一个他们 Git 的分支名称和提交哈希 ID 的列表。您的 Git 从他们的 Git 中获取他们拥有而您没有的任何新提交,然后您的 Git 会更新您对其分支的记忆。 您可以选择刷新的时间和频率。如果您愿意,您可以在本地删除名称 master(尽管您需要在本地使用其他一些分支名称,或者在本地处于分离的 HEAD 模式下才能执行此操作),这样您就不会想使用您的名称master 更多。有些人喜欢,有些人不喜欢;这是品味/意见的问题。 @roulette01:origin/master 是一个名字。您的 Git 存储库有两个数据库:一个包含 Git objects(通过哈希 ID 找到),一个包含 names(分支名称、标签名称等)。每个名称仅包含一个哈希 ID。运行git for-each-ref(不是一个对用户非常友好的命令,但试试看),您将看到(几乎)每个名称,包括完整的拼写和相应的哈希 ID,以及对象的类型。 origin/master 只是 refs/remotes/origin/master 的简写:这个名字的完整拼写。 【参考方案1】:

Stack Overflow 并不真正适合“应该”或“需要”的问题。您所做的是必须决定的事情。我们能做的是为您阐明您的代码的含义。假设这是初始情况:

A -- B -- C -- D <-- master on the remote

A -- B -- C <-- origin/master on your computer
 \
  X -- Y <-- your local branch

如果您在本地分支上,并且现在重新定位到 origin/master,您会得到:

A -- B -- C -- D <-- master on the remote

A -- B -- C <-- origin/master on your computer
           \
            X' -- Y' <-- your local branch

如果你说git fetch 然后变基为origin/master,你会得到这个:

A -- B -- C -- D <-- master on the remote

A -- B -- C -- D <-- origin/master on your computer
                \
                 X' -- Y' <-- your local branch

哪个更好?只有你知道。这取决于你为什么要变基。

【讨论】:

啊,我想我之前把自己弄糊涂了,因此为什么我的问题没有掩盖意义。在您的示例中,origin/master 与名为 master 的本地分支相同? 不,它与名为origin/master 的远程跟踪分支相同。远程跟踪分支永远不能与本地分支“相同”。一个是远程跟踪分支,另一个是本地分支。 如果你已经一个来自远程跟踪分支origin/master的本地master,你有什么理由必须将它重新定位到origin/master?如果您不先获取,那么绝对不会发生任何事情,那有什么意义呢? 分行的“类型”有3种1)本地2)远程跟踪3)远程,对吧?当你变基时,你是变基到 2 还是 3?我认为这可能是我在术语/思维过程中迷失的地方。 您在本地工作,而不是在远程工作。您没有“拥有”远程分支;他们在遥控器上,遥控器上有他们。您有本地分支机构和远程跟踪分支机构。你可以基于其中任何一个。一个分支就是一个分支。 (实际上,你不会变基到分支上;你变基到提交。你可以变基到你拥有的任何提交,不管你碰巧有它。)

以上是关于如果不再使用本地分支,我应该使用 `git pull --rebase origin master` 还是 `git rebase origin/master`?的主要内容,如果未能解决你的问题,请参考以下文章

git merge 单一文件

Git 拉取分支

删除本地git的远程分支和远程删除git服务器的分支

git 切换本地分支 删除了文件

git切换分支冲突解决-删除分支

Git 撤消本地分支删除