我目前有一个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已知的任何文件都不匹配。"
答案 0 :(得分:2)
git checkout
可以删除您忽略的未跟踪文件之一。如果其他人在另一个分支中跟踪该文件,则可能发生这种情况。
确定某人是否跟踪了他们不应该跟踪的文件的一种方法是使用文件名限制运行git log
。
git log --follow -- filename.ext
如果您不需要跟踪重命名,则可以使用简化搜索。
git log -- filename.txt
两者都将显示影响filename.ext文件的提交。第一个(--follow
)也会检测重命名。按路径搜索时,在filename.ext之前需要--
,以告知git它是一个文件名。
这是PowerShell中使用git的一个场景,其中有人可能添加了一个被忽略的文件。
new-item -type directory "repo"
cd repo
git init
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,因为它被忽略了。
git add -f test.txt
git commit -n "Force add test.txt"
Git现在正在跟踪test.txt,并且HEAD~1的结帐将删除它,即使它在你的.gitignore中。
git checkout HEAD~1
# this will delete the "ignored" file.
同样,如果另一个人(强制)添加了test.txt文件,那么他们的分支结帐可能会删除您忽略的未跟踪文件。
答案 1 :(得分:1)
我发现了原因:git用于跟踪合并提交的分支中的文件,在主分支的日志中没有留下任何痕迹。查看合并分支的日志显示了文件上的操作。