将git变更拉取到一个未检出的分支中

3

我有一个包含两个分支(1.0和master)的git仓库。如果我想在1.0上工作,我可以使用以下命令克隆它:

git clone ssh://user@server/project -b 1.0 project-1.0

一切都很好。如果我发出git branch命令,我会看到:

1.0

git branch -a 的输出结果如下:

* 1.0
  remotes/origin/1.0
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

然而,如果其他人推送更改到主分支,而我又对1.0进行更改并尝试推送,则会失败,因为我需要更新我的存储库以反映主分支的更改。为了做到这一点,我需要检出主分支,拉取更改,然后切换回1.0:

git checkout master
git pull
git checkout 1.0

然而,有没有更简单的方法可以在不先checkout主分支的情况下拉取最新的更改?
3个回答

3
如果您使用git fetch origin,那么所有位于origin远程的跟踪分支都将被更新。这不会更改任何“您”的分支,但是您可以从任何远程跟踪分支合并到您的1.0分支。
简单来说,git pull本质上是git fetch后跟着一个git merge

2
如果我执行 git fetch origin 命令并使用 git log 查看主分支上的最新提交记录,那么我看不到新内容。但是,如果我执行 git fetch origin master:master 命令,则可以在不检出分支的情况下查看提交记录。 - Rob

3
在这种特殊情况下,当主分支可以快进到远程主分支时,我会执行git push . origin/master:master(是的,是一个点“.”)。

1
根据你的 git branch -a,你没有一个名为 master 的本地分支。因此,git log master 不应该工作。远程跟踪分支——即 origin/master ——在获取时总是更新的。因此,如果你想看到来自 origin 远程的 master 分支的日志,你只需要执行 git fetch; git log origin/master。听起来你不想拥有自己的主分支,因此 git checkout master 可能是一个错误,这会让你的工作流程更加困扰。

然而,如果其他人将更改推送到主分支并且我对 1.0 进行更改并尝试推送,它将失败,因为我需要使用主分支的更改更新我的仓库。

这是不正确的。只要没有人向1.0推送分歧更改,您就可以将其推送。主分支并没有什么特别之处。您可以使用 git branch -d master (如果它已经与1.0分开,则会通知您已合并到origin/master但不是HEAD),因为似乎您对维护自己的主版本不感兴趣。

同样,其他人向主分支推送并不会阻止您向1.0推送,您也不需要检出本地的master来检查origin/master


是的,因为我一直在查看主分支,所以我认为我让自己的生活变得困难了。谢谢你的回答。 - Rob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接