使用git pull跟踪远程分支而不合并

时间:2010-06-16 19:01:49

标签: git git-pull

我正在使用git来跟踪某些人更改的内容,并与其他人共享“只读”内容。 “读者”可能不时需要做出改变,但大多数情况下他们不会做出改变。

我想允许git“编写者”根据需要重新推送推送分支**,并确保“读者”不会意外地获得合并。这通常很容易。

git pull origin +master

有一个案例似乎会引起问题。如果读者进行本地更改,则上述命令将合并。如果读者没有进行局部更改,我希望pull完全自动化,而如果他们进行了本地更改,则应该停止并请求输入。我想跟踪任何上游变化,同时小心合并下游变化。

在某种程度上,我真的不想拉。我想完全跟踪主分支。


**(我知道这不是最佳做法,但在我们的案例中似乎是必要的:我们有一个主要分支包含大部分工作,而某些主题分支适用于需要隔离的微小更改的特定客户。为了使主题保持最新,经常重新定位似乎最容易。)

6 个答案:

答案 0 :(得分:7)

您正在寻找git-fetch命令。

答案 1 :(得分:4)

您可能还会发现git pull --rebase有用。

通过在各个分支上设置--rebase,可以将

更新: pull设为默认branch.<name>.rebase = true行为。默认情况下,设置branch.autosetuprebase = true将在新分支上设置此项,但现有分支需要手动更新。或者,您可以通过全局设置--rebase来默认为pull.rebase = true

答案 2 :(得分:2)

怎么样:

  git pull --ff-only origin master

我经常使用它。不幸的是,正如richard-hansen @在下面指出的那样,这不能作为别名:

[alias]
pull = pull --ff-only

答案 3 :(得分:0)

由于您不希望读取器手动合并,您可以编写一个钩子来检查发生的情况并提示用户:

http://git-scm.com/docs/githooks

我仍然会建议读取并让读者在本地管理他们的合并或重组。这是解决问题的简单方法。

答案 4 :(得分:0)

Git 2.0(2014年第二季度)将添加commit b814da8个配置push.ff

pull.ff::
  

默认情况下,Git在合并作为当前提交后代的提交时不会创建额外的合并提交。相反,当前分支的提示是快进的。

     
      
  • 当设置为false时,此变量告诉Git在这种情况下创建额外的合并提交(相当于从命令行提供--no-ff选项)。
  •   
  • 当设置为only时,仅允许此类快进合并(相当于从命令行提供--ff-only选项。)
  •   

答案 5 :(得分:0)

我认为你想要一个使用两个分支的工作流程。合并的本地分支(主)和远程“只读”#39;跟踪分支(远程)。

在主分支上使用双遥控器可让您继续工作,并与远程项目保持同步。您可以将本地更改和合并的远程更改推送到本地git服务器。

 git push localserver master

可以在远程跟踪分支上创建和优化上游补丁,并将其提交给项目。

“只读”的单独跟踪分支&#39; remote允许您为远程项目的上游准备补丁和提交。

# Master branch is merge of local changes, and remote changes
git checkout master
git pull -m origin master
# Set up a local tracking branch for the 'read-only' remote.
git checkout -b remote remote master
# Start reviewing changes between the two branches.
git diff --name-status ..master

当您想要上游补丁时,可以使用master..remote中的diff来定义补丁是您的只读远程分支。

git diff master..remote -- files >patch
git checkout remote
patch -p1 <patch
git commit -m "Your patch"
git format-patch -1

将格式化的补丁文件发送到远程项目。如果您需要为远程项目修改和变基,您可以在远程跟踪分支上执行该操作,直到它被批准为止。

(设置git双遥控器涉及编辑.git / config,并在别处解释)