了解 git 如何删除一个应该被忽略的文件
Find out how git removed a file that should be ignored
我目前有一个 git 存储库设置为裸存储库,然后 git checkout -f
s 到 public 文件夹进行发布。最近提交的内容似乎删除了 .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
returns 空白结果。
运行 git ls-files filename --error-unmatch
returns "error: pathspec 'filename' did not match any file(s) known to git."
A git checkout
可以删除您忽略的、未跟踪的文件之一。如果其他人在不同的分支中跟踪该文件,则可能会发生这种情况。
取证
确定某人是否跟踪了他们不应该跟踪的文件的一种方法是 运行 git log
并通过文件名进行限制。
git log --follow -- filename.ext
如果您不需要跟踪重命名,可以使用简化搜索。
git log -- filename.txt
两者都将显示影响 filename.ext 文件的提交。第一个(--follow
)也将检测重命名。按路径搜索时,--
必须在 filename.ext 之前,以告知 git 这是一个文件名。
场景/示例
这是 PowerShell 中 git 的一个场景,其中有人可能添加了一个被忽略的文件。
创建并初始化本地 git 存储库
new-item -type directory "repo"
cd repo
git init
添加一个git忽略和一个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.
同样,如果另一个人(force)添加了 test.txt 文件,他们分支的签出可能会删除您忽略的、未跟踪的文件。
我找到了原因:git用于跟踪合并提交的分支中的文件,在主分支的日志中没有留下任何痕迹。查看合并分支的日志显示了对文件的操作。
我目前有一个 git 存储库设置为裸存储库,然后 git checkout -f
s 到 public 文件夹进行发布。最近提交的内容似乎删除了 .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
returns 空白结果。
运行 git ls-files filename --error-unmatch
returns "error: pathspec 'filename' did not match any file(s) known to git."
A git checkout
可以删除您忽略的、未跟踪的文件之一。如果其他人在不同的分支中跟踪该文件,则可能会发生这种情况。
取证
确定某人是否跟踪了他们不应该跟踪的文件的一种方法是 运行 git log
并通过文件名进行限制。
git log --follow -- filename.ext
如果您不需要跟踪重命名,可以使用简化搜索。
git log -- filename.txt
两者都将显示影响 filename.ext 文件的提交。第一个(--follow
)也将检测重命名。按路径搜索时,--
必须在 filename.ext 之前,以告知 git 这是一个文件名。
场景/示例
这是 PowerShell 中 git 的一个场景,其中有人可能添加了一个被忽略的文件。
创建并初始化本地 git 存储库
new-item -type directory "repo"
cd repo
git init
添加一个git忽略和一个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.
同样,如果另一个人(force)添加了 test.txt 文件,他们分支的签出可能会删除您忽略的、未跟踪的文件。
我找到了原因:git用于跟踪合并提交的分支中的文件,在主分支的日志中没有留下任何痕迹。查看合并分支的日志显示了对文件的操作。