我很难让这个工作起作用,很可能是因为对每个命令实际负责的内容缺乏了解。
我有:
场景:
我想:
我已经尝试通过执行以下操作来实现此目的。
在“B”中:
git fetch -a -t origin
git merge --no-commit --no-ff TAG
git reset Z
git commit
它不起作用。
git pull --rebase origin master
仍然更新'Z',所以我不知道在哪里重置'Z'。
答案 0 :(得分:2)
而不是git reset
,您需要在第3步中使用git checkout
:
git fetch -a -t origin
git merge --no-commit --no-ff TAG
git checkout HEAD -- Z/
git commit
一般来说,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中的更改。