不合并地拉取远程分支

36

我创建了一个名为b1的分支,并对其进行了一些更改,然后将其推送到远程代码库:

我创建了一个名为b1的分支,并对其进行了一些更改,然后将其推送到远程代码库:

git branch b1
git checkout b1
git add newfile.txt
git commit -m "adding a new file"
git push origin b1

在另一台连接到远程仓库的机器上,我尝试从分支中获取代码,而不将其与主分支合并:

$git branch
*master
$git pull origin b1
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From sl*******02:/opt/git/projet1
 * branch            b1    -> FETCH_HEAD
Updating fca3b48..1d96ceb
Fast-forward
 newfile.txt |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 newfile.txt

$git branch
*master
我期望的是:
$git branch
*master
b1

在推送代码之前,似乎您错过了检出新分支的一步? - Vuong
git branch 列出本地分支,由于您从未检出 b1,它仅驻留在远程,使用 git branch -a 也可以列出它。为了将其作为本地分支获取,请使用 git checkout b1 检出它,这将从远程分支创建一个本地分支,并在它们之间设置上游映射。 - Lasse V. Karlsen
@LasseVågsætherKarlsen 这是我在检出 b1 时收到的错误信息:error: pathspec 'b1' did not match any file(s) known to git. - Carole
首先尝试不带参数的 git fetch,或者使用 git fetch origin - Lasse V. Karlsen
6个回答

52

你实际上在问两个问题:

  • 标题中的问题 - 如何在不合并的情况下拉取(我最初是为了这个问题而来;)
  • 描述中的问题 - 如何检出一个分支而不合并到主分支

不合并地拉取远程分支

# Assuming you are on wanted branch (b1) already

git pull --rebase

不要进行合并操作,只需进行变基操作。

检出远程分支(来自源)

git fetch 
git checkout b1

不要合并到 master 分支,创建新的 b1 分支。


这对我来说绝对是最有用的答案。在单个命令中执行拉取和变基非常方便。 - Zoom

51

您可以使用 git fetch origin b1 仅获取远程分支而不进行合并。

参考文献: https://git-scm.com/docs/git-fetch

基本上,git pullgit fetch && git merge 的快捷方式。

由于您在主分支上,而不是您的本地 b1 分支,因此执行了合并操作。


8

你想要检出远程分支,可以使用以下命令:

git checkout b1

如果您使用的是Git版本< 1.6.6,则可以通过以下方式完成:
git checkout -b b1 origin/b1

如果这个分支还不存在,我该如何检出它? - Carole
@Carole,它默认为您已经获取的唯一远程。 - DRC
1
你能解释得更详细一些吗? - Carole
2
@Carole,你首先需要执行git fetch命令,这将获取所有远程分支,你可以通过git branch -a命令查看它们。当执行git checkout b1命令时,你会切换到origin/b1分支。 - DRC

3
在提交之前也可以使用以下命令。
git stash
git pull
git stash apply

请更详细地解释一下你的答案,因为我想要像在某个功能A分支上弹出stash pop一样,但是在功能B分支中的更改已经提交了...那么如何从功能B分支获取stash。 - Tuhin Mitra

1
git remote update origin —prune

6
欢迎来到 Stack Overflow。如果命令以代码格式进行格式化,那么它们会更易于阅读。仅包含代码的答案通常可以通过添加一些解释来改进,解释如何以及为什么它们能够运作,对于命令,如果成功,预期输出应该是什么样子,或者如何解释命令的结果(如果适用)。 - Jason Aller

0

我是这样做的:

步骤:

  • 切换到不同的分支
  • git stash
  • 删除本地分支,其中有合并错误/冲突
  • 执行 git fetch all
  • git checkout <在之前出现合并错误的分支名称>
  • git pull origin

命令:

例如:

  • 错误分支名称:Error-branch

  • 其他分支名称:Other-branch

  • git checkout Other-branch
  • git stash
  • git branch -d Error-branch(如果不起作用,请使用下面的命令)
  • git branch -D Error-branch(如果您有合并冲突)
  • git fetch all
  • git checkout Error-branch
  • git pull origin

希望这能解决您的问题。


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