只要我使用git,如果我想将本地分支重置为远程主分支,我就已经完成了
git
git reset --hard origin
这似乎是经验性的,但我最近了解到,这可能取决于存储库的设置,origin可能并不总是远程主分支的头。我如何检查它指向什么?
origin
siotufzp1#
每个远程都有一个 * 默认分支 *,可以使用git remote set-head进行设置。这个设置是你的克隆的本地设置,独立于远程仓库(但是你可以让Git从远程仓库赋值)。当用于修订版本时,origin等效于origin/HEAD。因此,git reset --hard origin与git reset --hard origin/HEAD相同。要查询哪个分支当前配置为远程的默认分支,请运行git symbolic-ref refs/remotes/origin/HEAD。要查找远程存储库的已配置默认分支,请运行git remote show origin。默认的分支打印在HEAD branch: ...行中。
git remote set-head
origin/HEAD
git reset --hard origin/HEAD
git symbolic-ref refs/remotes/origin/HEAD
git remote show origin
HEAD branch: ...
yrwegjxp2#
origin本身通常指的是一个特定的远程存储器-您从其中克隆存储库的远程存储器。如果你看到origin是一个较长的字符串的一部分,比如origin/main或origin/develop,那么它表明Git应该检查它所知道的指定分支(在示例中,main或develop)在origin远程上的信息。在上面的例子(git reset --hard origin)中,本地分支将被重置为Git所知道的相关远程分支。这是因为本地Git已经知道当前分支应该跟踪特定的远程分支。(请注意,git reset不会启动任何类型的网络会话,因此如果您最近没有运行git fetch或git pull,则您的重置可能与遥控器上的实际内容不匹配。您可以使用git remote -v(也将列出任何其他远程)或git remote get-url origin(仅列出origin)查看origin引用的内容。
origin/main
origin/develop
main
develop
git reset
git fetch
git pull
git remote -v
git remote get-url origin
ttp71kqs3#
您可以使用git remote -v查看存储库中引用的源代码但是,对命令的简单修复将单独解决您的问题。只需使用git reset --hard origin/master并明确表示您希望重置为origin/master。(请注意,为了获得最高精度,您可能应该首先执行git fetch origin。在你的例子中,它之所以有效,是因为你的分支正在跟踪origin/master,所以git从origin中选择了远程跟踪分支作为隐含的refspec(完全扩展为origin/master)。如果您没有跟踪origin/master,则不会重置为origin/master,而是重置为origin/foo,例如,如果您正在跟踪远程存储库的foo分支。
git reset --hard origin/master
origin/master
git fetch origin
origin/foo
foo
wko9yo5t4#
git remote -v将显示本地存储库的所有引用的远程分支。名称是variable,你可以设置任何你想要的。此外,您可以更改variable:
variable
git remote add origin https://some_url/some_repo
或删除它:
git remote remove origin
并使用其他名称,删除后:
git remote set-url blabla https://some_url/some_repo
最后,您可以重置:variable是原点,current branch是主节点
current branch
git fetch origin git reset --hard origin/master
2vuwiymt5#
如果你想知道origin指的是什么,最好的方法(IMO)可能是:
git config remote.origin.url
请注意,这根本没有说明当前分支是否跟踪origin上的分支,而且git reset --hard origin可能根本不是您想要的。但我怀疑你实际上并不关心origin指向什么。如果你想将当前的分支重置为它正在跟踪的位置,你可以使用用途:
git reset --hard @{u}
这将重置当前的分支到它的远程跟踪分支,你不关心远程origin是什么。(注意,这实际上将当前分支设置为您的本地存储库认为在远程存储库上是当前的分支,因此您可能需要在此之前使用git fetch。
5条答案
按热度按时间siotufzp1#
每个远程都有一个 * 默认分支 *,可以使用
git remote set-head
进行设置。这个设置是你的克隆的本地设置,独立于远程仓库(但是你可以让Git从远程仓库赋值)。当用于修订版本时,
origin
等效于origin/HEAD
。因此,git reset --hard origin
与git reset --hard origin/HEAD
相同。要查询哪个分支当前配置为远程的默认分支,请运行
git symbolic-ref refs/remotes/origin/HEAD
。要查找远程存储库的已配置默认分支,请运行
git remote show origin
。默认的分支打印在HEAD branch: ...
行中。yrwegjxp2#
origin
本身通常指的是一个特定的远程存储器-您从其中克隆存储库的远程存储器。如果你看到origin
是一个较长的字符串的一部分,比如origin/main
或origin/develop
,那么它表明Git应该检查它所知道的指定分支(在示例中,main
或develop
)在origin
远程上的信息。在上面的例子(
git reset --hard origin
)中,本地分支将被重置为Git所知道的相关远程分支。这是因为本地Git已经知道当前分支应该跟踪特定的远程分支。(请注意,git reset
不会启动任何类型的网络会话,因此如果您最近没有运行git fetch
或git pull
,则您的重置可能与遥控器上的实际内容不匹配。您可以使用
git remote -v
(也将列出任何其他远程)或git remote get-url origin
(仅列出origin)查看origin
引用的内容。ttp71kqs3#
您可以使用
git remote -v
查看存储库中引用的源代码但是,对命令的简单修复将单独解决您的问题。只需使用
git reset --hard origin/master
并明确表示您希望重置为origin/master
。(请注意,为了获得最高精度,您可能应该首先执行git fetch origin
。在你的例子中,它之所以有效,是因为你的分支正在跟踪
origin/master
,所以git从origin
中选择了远程跟踪分支作为隐含的refspec(完全扩展为origin/master
)。如果您没有跟踪origin/master
,则不会重置为origin/master
,而是重置为origin/foo
,例如,如果您正在跟踪远程存储库的foo
分支。wko9yo5t4#
git remote -v
将显示本地存储库的所有引用的远程分支。名称是variable
,你可以设置任何你想要的。此外,您可以更改
variable
:或删除它:
并使用其他名称,删除后:
最后,您可以重置:
variable
是原点,current branch
是主节点2vuwiymt5#
如果你想知道
origin
指的是什么,最好的方法(IMO)可能是:请注意,这根本没有说明当前分支是否跟踪
origin
上的分支,而且git reset --hard origin
可能根本不是您想要的。但我怀疑你实际上并不关心origin
指向什么。如果你想将当前的分支重置为它正在跟踪的位置,你可以使用用途:这将重置当前的分支到它的远程跟踪分支,你不关心远程
origin
是什么。(注意,这实际上将当前分支设置为您的本地存储库认为在远程存储库上是当前的分支,因此您可能需要在此之前使用git fetch
。