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

问题描述 投票:4回答:6

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

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

git pull origin +master

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

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


**(我知道这不是一个最佳实践,但在我们的案例中似乎是必要的:我们有一个主要分支包含大部分工作和一些主题分支,用于需要隔离的微小变化的特定客户。这似乎最简单经常改变以使主题保持最新。)

git git-pull
6个回答
7
投票

您正在寻找命令git-fetch


4
投票

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

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


2
投票

怎么样:

  git pull --ff-only origin master

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

[alias]
pull = pull --ff-only

0
投票

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

pull.ff::

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

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

0
投票

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

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

 git push localserver master

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

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

# 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,并在别处解释)


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.