如何保持两个单独的工作目录同步-还是git能够识别相同的提交?

时间:2018-11-13 16:56:38

标签: git

  1. (在某些工作目录A中),我做了一些本地更改并执行了添加和提交
  2. (在某些工作目录B中)我为这些本地更改(在目录A中)获得了补丁,并将其应用到目录B中。我在目录B中执行了add / commit / push。
  3. (在工作目录A中)我执行了git pull,并希望本地提交消失。没有。
  4. (在工作目录A中)我执行了git reset HEAD〜。 git diff显示了早已推送的更改。 (忘记这一点-这是我为解决此问题所做的尝试)

显然我做错了。是什么?

3 个答案:

答案 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.rebasehttps://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标志。