了解git如何删除应该忽略的文件

时间:2015-02-11 23:20:46

标签: git gitignore

我目前有一个git repo设置为裸存储库,然后git checkout -f到公共文件夹进行发布。最近提交了一个似乎删除.gitignore文件的提交。

有没有办法查看该文件是如何删除的?将这些更改下拉到我的本地也删除了我的机器上的文件:

nic@TALRASHA:/mnt/code/repository$ git pull
remote: Counting objects: 42, done.
remote: Compressing objects: 100% (20/20), done.
remote: Total 26 (delta 18), reused 9 (delta 6)
Unpacking objects: 100% (26/26), done.
From ssh://[server-address]/var/www/vhosts/thewebsite/repository
   f470eff..82dc3bf  live       -> server/live
Updating f470eff..82dc3bf
Fast-forward
 application/views/templates/owners/default.php |  20 +++++++++++---------
 layout/owners/images/sprites-mobile-pages.png  | Bin 0 -> 89606 bytes
 layout/owners/js/owners.js                     |  44 ++++++
 src/less/layout/owners/dashboard.less          |  25 +++++++++++++++----
 4 files changed, 76 insertions(+), 13 deletions(-)
 create mode 100644 layout/owners/images/sprites-mobile-pages.png

运行git log --follow -- filename会返回空白结果。 正在运行git ls-files filename --error-unmatch会返回"错误:pathspec' filename'与git已知的任何文件都不匹配。"

2 个答案:

答案 0 :(得分:2)

git checkout可以删除您忽略的未跟踪文件之一。如果其他人在另一个分支中跟踪该文件,则可能发生这种情况。

取证

确定某人是否跟踪了他们不应该跟踪的文件的一种方法是使用文件名限制运行git log

git log --follow -- filename.ext

如果您不需要跟踪重命名,则可以使用简化搜索。

git log -- filename.txt

两者都将显示影响filename.ext文件的提交。第一个(--follow)也会检测重命名。按路径搜索时,在filename.ext之前需要--,以告知git它是一个文件名。

场景/示例

这是PowerShell中使用git的一个场景,其中有人可能添加了一个被忽略的文件。

创建并初始化本地git repo

new-item -type directory "repo"
cd repo
git init

添加gitignore和test.txt文件以忽略

new-item -type file ".gitignore"
add-content .gitignore "*.txt" 
new-item -type file "test.txt"
git add -A;
git commit -m "Add gitignore";

此时,git没有跟踪test.txt,因为它被忽略了。

强制添加test.txt文件

git add -f test.txt
git commit -n "Force add test.txt"

Git现在正在跟踪test.txt,并且HEAD~1的结帐将删除它,即使它在你的.gitignore中。

检查您之前的提交以删除忽略的test.txt

git checkout HEAD~1
# this will delete the "ignored" file.

同样,如果另一个人(强制)添加了test.txt文件,那么他们的分支结帐可能会删除您忽略的未跟踪文件。

答案 1 :(得分:1)

我发现了原因:git用于跟踪合并提交的分支中的文件,在主分支的日志中没有留下任何痕迹。查看合并分支的日志显示了文件上的操作。

相关问题