git checkout分支而不删除其中删除的文件

时间:2014-05-14 10:34:51

标签: git

以下是我面临的情况:

一个充满生成文件的目录,其中错误地提交给了repo。他们显然不应该这样,所以我想删除它们:

$ git rm --cached foo/*
$ cat > foo/.gitignore
*
!.gitignore
$ git add foo/
$ git commit -m "Ignored stuff in foo"

这几乎解决了它,但留下了不同的问题。当我想在生产服务器上git fetch && git checkout时,将删除foo /目录中生成的所有文件。我能在两边做些什么吗?请注意,忽略它们不是一种选择,因为它们可以改变。

2 个答案:

答案 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,以便删除&签出文件将被取消暂存。

它有效,但我仍希望在下次发生这种情况时看到更好的方法。