显然我做错了。是什么?
答案 0 :(得分:0)
这是我认为您所描述的: 在机器1上进行提交X 在计算机2上,应用执行相同操作的补丁,并创建commit X' 推送提交X'
在计算机1上拉提交X' 机器1现在有2个提交:X和X'
您在计算机1上重置HEAD〜,删除了提交X',并保留了提交X。
pull是在获取之后进行合并。我的理解是,在合并中git可以识别相同的更改。
仍然,再次拉动并运行可能会很有趣 git show HEAD 看看犯了什么。 也许这是内容很少的合并提交? 拥有更多管道知识的人可能会回答得更好。 也可能取决于您合并的设置。合并,变基?
答案 1 :(得分:0)
有许多方法可以查看如何在两台计算机的工作目录之间协调内容。
最基本的是:如果您在机器A上提交了更改,并希望在机器B上进行更改,则可以将它们从A取到B,以便A和B通过相同的提交获得补丁 。有时这不是一个合适的答案,因此其他方法也是可行的。但是哪个对您在做什么有意义,取决于您在做什么,而且我们还不足以解决这个问题。
因此,如果可以的话,我们可以对其进行跟进,但让我们首先澄清可能的概念误解:
(在工作目录A中)我执行了git pull,并希望本地提交消失。没有。
我的问题是,为什么这是预期的行为?通常,当您进行远程更改时,您不会想要本地更改消失。相反,您想将它们组合起来。
现在,在本地更改和远程更改相同的特定情况下,您可能确实希望本地更改消失,并且如果您将本地更改基于新获取的内容远程更改,那么这应该发生。
git pull --rebase
现在,如果在将本地更改重新基于所获取的更改的过程中,git发现本地提交的补丁与所获取的提交之一的补丁完全相同,则本地提交将被丢弃。
也许您期望这种行为,因为过去您使用过将repos配置为默认情况下基于pull的行为?请注意,自动重定档记录为“潜在危险”功能,因此您可能要考虑它是否真的是最佳默认设置。但是如果您要使用默认值,请在git config文档中查找pull.rebase
:https://git-scm.com/docs/git-config
答案 2 :(得分:0)
您可以使用git pull来做到这一点,但我会使用rsync
cd directory_A; rsync -mauvPAX directory_B/ .
这将有效地将directory_B的内容复制到directory_A中,并保留directory_A中缺少的所有文件。
如果您要清理Directory_A中没有的所有其他文件,请添加--delete
标志。