说我在Git存储库中.我删除了一个文件并提交了更改.我继续工作,并做了一些更多的提交.然后,我发现我需要恢复该文件.
我知道我可以使用签出文件git checkout HEAD^ foo.bar,但我真的不知道该文件何时被删除.
我希望我不必手动浏览我的日志,检查整个项目的给定SHA,然后手动将该文件复制到我原来的项目结帐中.
我有一个带有n次提交的Git存储库.
我有一个我需要的文件,以前曾经在存储库中,我突然寻找并想"哦!那个文件去哪了?"
是否有(系列)Git命令会告诉我"在提交n-13时删除了文件really_needed.txt"?
换句话说,如果不查看每个单独的提交,并且知道我的Git repo对每个文件进行了每次更改,我是否可以快速找到该文件的最后一次提交,以便我可以将其恢复?
我知道git存储文件何时被删除的信息,我能够检查各个提交以查看哪些文件已被删除但是是否有一个命令可以在存储库的生命周期内生成每个已删除文件的列表?
尽管阅读了很多关于GIT和移动文件的帖子,但我仍然很难理解如何追踪完整的历史记录.这样gitk myfile的建议在这里似乎只能说明历史,直到前一个举动.据我所知,GIT不会跟踪文件,只跟踪文件的内容.所以我肯定能够查看文件的完整演变,即使它被移动了吗?
任何人都可以指导我一个简单的好例子/教程吗?
我想看一个示例,其中一些文件被移动,更改和提交,然后显示单个文件的历史记录,移动和所有.我一直在看'日志',但这似乎与checkins有关.仍然会欣赏一些建议,即使它说我仍然在想太多的SVN.
Git不会跟踪目录.它只跟踪某些目录中的文件.(请参阅如何将空目录添加到Git存储库?)
但是,如果我有一定的提交历史,我隐含地也有目录树的更改历史记录.
那么我该如何回答以下问题:
我能想出的最接近的是伪代码:
loop over all commits (git rev-list --all)
start from repo root directory
do recursively on the directory tree rebuilt so far
call git ls-tree and grep the tree lines
rebuild next level of directory tree
end
end
Run Code Online (Sandbox Code Playgroud)
显然,这可以用您最喜欢的脚本语言编写.
然后我有所有目录树,我仍然需要以聪明的方式搜索它们,以便回答类型1 - 3的问题.再次,可行,但可能不会在几分钟内.
问题是:
我git-filter-repo通过安装scoop,尝试了多个git filter-repo命令,例如git filter-repo -h,它们都没有记录任何内容,没有警告或错误,只是没有记录。
尝试重新启动、重新安装并在另一台 Windows 10 计算机上安装它,全部重现。
git-filter-repo: v2.33.0
git: v2.33.0.windows.2
python: v3.9.7
scoop:
Current Scoop version:
09200504 (HEAD -> master, origin/master, origin/HEAD) reset: skip when app instance is running (#4359)
'main' bucket:
b71f4a842 (HEAD -> master, origin/master, origin/HEAD) nunit-extension-vs-project-loader: Update to version 3.9.0
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题?
我有三个文件Shell-ijk-ArrayList.java,Shell-ijk-Vektor.java并Shell-ikj-ArrayList.java在这个混帐存储库.我已经手动"合并"了它们MatrixMultiplication.java.现在我想摆脱其他三个,但我想保留它们的历史.做这个的最好方式是什么?
我找到了git merge-file,但是当我尝试的时候
git merge-file MatrixMultiplication.java Shell-ijk-ArrayList.java Shell-ijk-Vektor.java
Run Code Online (Sandbox Code Playgroud)
我明白了
error: Could not stat MatrixMultiplication.java
Run Code Online (Sandbox Code Playgroud)
我可以简单地删除旧文件git rm,但后来我将失去历史,不是吗?
我也可以移动它git mv,但对于过时的文件,什么是一个很好的文件夹?
初学者的一个问题:git历史记录有多种搜索方式。对我来说,不清楚命令之间的区别到底是什么:
git log,例如git log -S 'for what you search' --all在所有分支中搜索字符串并
git log -G 'search for regexpr' --all搜索 regexpr。例如参见这里git log --grep 'pattern'git rev-list,例如git rev-list --grep='string' --allgit grep,例如git grep "string or regexpr" $(git rev-list --all)从这里gitk,例如gitk file.txtGUI 界面git log --all --full-history -- **/thefile.*从这里搜索历史记录中的文件名。git diff --word-diff-regex=. > changes.txt结合grep -oP '\+[^\+]+\+' changes.txt | tr -d '\+'显示基于字符的变化。从这里。如果尚未提交更改,这甚至可以工作。我的理解很差
git …所以我的一个项目中有一个文件被删除了,没有人知道何时或为什么,它就这样消失了。(可能几个月)。问题是我只知道名字的一部分,不知道全名。我如何搜索在提交(不是提交消息)中添加/删除的文件?
该文件应该看起来像something_something.*.xml,有什么想法吗?[*可以是一个字符串,也可以是由下划线、破折号或点分隔的多个字符串]
我错误地在我的分支中使用了“git rm my_file”。
经过一些提交、合并......现在我试图从 master 分支取回文件,我正在使用“git rebase master”,它说当前分支是最新的,但文件不存在。
有没有办法将文件从 master 获取到我的分支?我认为只需创建一个新分支即可解决问题。
git ×10
file-io ×1
git-branch ×1
git-checkout ×1
git-history ×1
git-rebase ×1
github ×1
python ×1
windows ×1