git,如何接受rm文件更新而不删除文件?

时间:2015-06-15 02:33:40

标签: git

我的django项目中有local_settings.py,这是每个开发者不同的自定义设置。 昨天,我错误地提交conf/local_settings.py来回购并推送到bitbucket。这个项目是新的,我认为它无法回滚,因为文件是在第一次推送时提交的,
我从repo中移除了local_settings.py而未通过git rm --cached ./conf/local_settings.py删除。这适用于本地计算机。

当我对我的vps进行git pull时遇到错误。

.....
>>> git pull origin master
Updating f1d56d3..6163ffb
error: Your local changes to the following files would be overwritten by merge:
        conf/local_settings.py
Please, commit your changes or stash them before you can merge.
Aborting

在拉动回购并自动更新代码后,如何让其他人不会删除他们的local_settings.py?我是git的新手,所以如果其他人在这种情况下合并自己,我担心会出现问题。

我的案例:

A有local_settings.py,B有local_settings.py,他们都使用origin master

  1. 一个git init,推送所有文件。 B拉。 A,B改变他们的local_settings.py,这是不同的。
  2. 查找local_settings.py不应该是回购。
  3. A git rm --cached ./conf/local_settings.py,并推送此提交。
  4. (我需要的)B拉,从B本地仓库中删除local_settings.py而不删除它。

2 个答案:

答案 0 :(得分:2)

其他开发人员无法提取包含local_settings.py的版本,因为Git知道它会覆盖他们(未跟踪)的版本。删除它并推送删除后,其他开发人员将能够再次拉动。

答案 1 :(得分:0)

(我想我正在谈论与Greg Hewgill的答案相同的事情)

      master
        *
.... <- A 

假设你有上面的回购

你所做的是你错误地将local_setting.py错误地推送到中央仓库,这使得它成为:

           master
             *
.... <- A <- B

(B包含local_setting.py

你试图解决的是

               master
                 *
... <- A <- B <- C

(C包含git rm local_setting.py) 因此你需要强制覆盖等

由于已经取消更改的存储库仍然在您的控制之下,并且在C之后应该没有提交,您应该做的是修复

  1. master重置为B(您提交的local_setting.py提交)

              master
                *
    ... <- A <- B <- C
    
  2. 使用git commit --amend来修复你的“之前的提交”(即B),不包括local_settings.py

    ... <- A <- B <- C
           ^  master
           |    *
            \-- B'
    
  3. 并推送到您的中央仓库。

    请注意,如果任何人在C之后还有其他提交,则此方法将无效。