Git,即使在拉动其他机器之后,如何使用git rm保存文件 - 缓存

时间:2017-04-26 11:50:50

标签: wordpress git

我想从很多git存储库中移除wordpress核心文件保留文件以免它破坏本地

git rm --cached -r wp-includes/ wp-admin/ ......

解决问题,问题是如何在生产服务器上git pull提交没有删除物理文件以便它不会破坏生产?

这是什么解决方案? (在生产和本地提交,并且由于提交将是相同的,没有任何东西可以在物理上建立?)

1 个答案:

答案 0 :(得分:1)

首先,解决您提出的解决方案:如果您在两个地方进行相同的更改,您将会遇到不必要的麻烦。如果任何不同,那么从git的角度来看,提交是相同的(不同的SHA1值);即使你试图完美地完成所有事情,时间戳也会有所不同。忘记之前的时间戳,我搞砸了自己,所以请相信我。一旦你有两个不同的提交具有相同的更改,让所有内容重新同步将可能是乏味的,并且你很有可能最终意外地从生产中删除文件,只是为了增加侮辱伤害

反而

我假设您在删除文件的同一提交中将它们添加到.gitignore。 (如果不是......那么,这将是一个好主意。)即使你没有,如果提交中没有其他删除,我即将建议的内容仍然可以轻松完成。 (忍受我,我想一分钟都会有意义。)

因此,您注意到,如果您执行pull,则将应用提交(包括删除);那很糟糕。但您可以使用reset来"跳过"那些变化。我将给出最一般的程序。假设您已投入生产:

X --- X <--(master)

但是你在origin之后;现在而不是pull

git fetch

给你

X --- X <--(master)
       \
        A --- B --- C <--(origin/master)
              ^
             deletes are here

如果没有A(即第一个新获取的提交有删除),则可以跳过此步骤;但除此之外:

git reset --hard A

现在我们有了

X --- X --- A <--(master)
             \
              B --- C <--(origin/master)
              ^
             deletes are here

接下来我们需要让git认为B已应用

git reset --mixed B

让我们的工作树不受影响。这意味着git status现在将显示来自B的每个更改的反转作为非分段更改(除非(a)该更改是删除,并且(b)相应的条目放入.gitignore) ;更多关于这一点,但我们的图片现在看起来像

X --- X --- A --- B <--(master)
                   \
                    C <--(origin/master)

如果B更改而不是删除文件,则需要删除&#34;撤消&#34;来自工作树的那些变化。

git checkout -- .
除了文件删除之外,

应该应用任何东西(这很好,因为你不想应用删除 - 这是本练习的重点)。如果有其他删除,则您需要手动重新应用这些内容。 git status输出将引领方向(特别是如果您更新了.gitignore,因为在这种情况下,当git status报告干净的工作树时,您将知道您已完成

从这里我们回到正常的方法,所以如果有一个提交C(即删除后有提交):

git pull

最后我们有

X --- X --- A --- B --- C <--(master)(origin/master)

没有已删除文件的worktree副本受到影响。