以下是我面临的情况:
一个充满生成文件的目录,其中错误地提交给了repo。他们显然不应该这样,所以我想删除它们:
$ git rm --cached foo/*
$ cat > foo/.gitignore
*
!.gitignore
$ git add foo/
$ git commit -m "Ignored stuff in foo"
这几乎解决了它,但留下了不同的问题。当我想在生产服务器上git fetch && git checkout
时,将删除foo /目录中生成的所有文件。我能在两边做些什么吗?请注意,忽略它们不是一种选择,因为它们可以改变。
答案 0 :(得分:1)
您可以尝试:
git fetch
git reset origin/master
git update-index --skip-worktree foo/*
git checkout --
由于git update-index
命令,结帐应忽略文件夹foo
。
答案 1 :(得分:0)
不确定这是做到这一点的最好方法,但我是用这个小黑客做到的:
提交部分是我在问题中写的,结账是棘手的:
$ git fetch
$ git checkout origin/master && \
git log HEAD^..HEAD --summary --diff-filter=D \
| grep delete | awk '{print $4}' | xargs git checkout HEAD^ -- \
&& git reset HEAD
这样我就会检查master中的最新提交,检查最新提交中删除的所有内容,然后重置为HEAD,以便删除&签出文件将被取消暂存。
它有效,但我仍希望在下次发生这种情况时看到更好的方法。