从远程裸仓库中提取最新更新,不包括某些路径

时间:2013-10-30 18:45:35

标签: git merge pull repository

我很难让这个工作起作用,很可能是因为对每个命令实际负责的内容缺乏了解。

我有:

  • “A”,一个简单的回购
  • “B”克隆自“A”(它可能应该是“A”中的分支,而是让我们从这个用例开始。)最初,它被克隆为裸露,但是当合并时,我需要有工作副本。
  • “B”从不推送到“A”

场景:

  1. “A”整整9码更新,包括dir'Z'
  2. “B”只有一个'Z'改变了
  3. 我想:

    1. 从远程“A”中提取所有更改,“Z”
    2. 除外
    3. 保持“Z”中的“B”对任何修订版中“A”的更改。
    4. 我已经尝试通过执行以下操作来实现此目的。

      在“B”中:

      1. git fetch -a -t origin
      2. git merge --no-commit --no-ff TAG
      3. git reset Z
      4. git commit
      5. 它不起作用。

        1. git pull --rebase origin master
        2. 仍然更新'Z',所以我不知道在哪里重置'Z'。

2 个答案:

答案 0 :(得分:2)

而不是git reset,您需要在第3步中使用git checkout

  1. git fetch -a -t origin
  2. git merge --no-commit --no-ff TAG
  3. git checkout HEAD -- Z/
  4. git commit
  5. 一般来说,git checkout是说“让我的工作副本中的某些内容看起来像我描述的引用”的方式,无论它是您的整个工作副本,文件还是子目录。这正是你想要的:在合并期间,你想说“废弃任何合并的变化,而是使目录Z看起来与HEAD中的完全一样”。 (请记住,HEAD尚未移动,因为合并尚未提交!)

    git reset通常用于操作HEAD的某个子集,索引(您为提交而进行的更改),以及工作副本一起到某个状态。重置可能令人困惑,但如果您想了解更多信息,可以在git-scm.com上进行详细的深入报道。

答案 1 :(得分:0)

因此,如果我的问题正确无误,您应该在B上git checkout -b newbranch在新分支中获取所有更改并git commit

提交更改后,您现在可以切换回master并执行git fetch -a origin && git merge origin/master。上面的命令将合并从A到B的所有更改。

合并后,您可以使用git rebase master newbranch从之前获取B上的所有更改,并将其更改为A中的更改。