说我在Git存储库中.我删除了一个文件并提交了更改.我继续工作,并做了一些更多的提交.然后,我发现我需要恢复该文件.
我知道我可以使用签出文件git checkout HEAD^ foo.bar,但我真的不知道该文件何时被删除.
我希望我不必手动浏览我的日志,检查整个项目的给定SHA,然后手动将该文件复制到我原来的项目结帐中.
基本上我想尝试别名:
git files 9fa3
Run Code Online (Sandbox Code Playgroud)
...执行命令:
git diff --name-status 9fa3^ 9fa3
Run Code Online (Sandbox Code Playgroud)
但是git似乎没有将位置参数传递给alias命令.我试过了:
[alias]
files = "!git diff --name-status $1^ $1"
files = "!git diff --name-status {1}^ {1}"
Run Code Online (Sandbox Code Playgroud)
......以及其他一些但不起作用.
退化的情况是:
$ git echo_reverse_these_params a b c d e
e d c b a
Run Code Online (Sandbox Code Playgroud)
......我怎么能做这个工作?
是否可以在git切换到另一个分支而不检查所有文件?切换分支后,我需要删除所有文件,重新生成它们,提交并切换回来.因此,检出文件只是浪费时间(并且有大约14000个文件 - 这是一个很长的操作).
为了使一切清楚:
我需要所有这些来上传文档到github.
我有gh-pages分支的回购.当我在本地重建文档时,我将其复制到repo目录,提交并推送到github.但我并不高兴,因为我在本地有两份文件.我决定创建空分支并在提交后切换为空并删除文件.但转回来是一个漫长的操作 - 所以我问了这个问题.
我知道我可以离开gh-pages分支并删除文件,但我不喜欢脏工作树)
这是一个例子:
>git status
# On branch master
nothing to commit (working directory clean)
>git checkout -b test-branch
>vi test.c
>git add test.c
>git commit -m "modified test.c"
>vi README
>git add README
>git commit -m "modified README"
Run Code Online (Sandbox Code Playgroud)
现在我想做一个' git rebase -i',这将让我为这个分支重新提交所有提交.有没有像' git rebase -i HEAD~MASTER'或类似的东西.我想我可以做' git rebase -i HEAD~2',但我真的不想计算已经提交了多少次提交.我也可以这样做git rebase -i sha1但我不想通过git log来查找第一个提交sha1.有任何想法吗?
我正在寻找相当于git commit -am "blah blah"但只有一个文件.如果我尝试:
git commit my.file -am "blah blah"
Run Code Online (Sandbox Code Playgroud)
我明白了:
fatal: Paths with -a does not make sense.
Run Code Online (Sandbox Code Playgroud)
我环顾四周,但我只能找到建议使用别名的解决方案(例如这个),但即使是那些似乎也不能修改,因为我需要传递一个参数.我是否必须通过shell调用git?
似乎应该有一个更简单的选择,我认为这将是非常常见的.现在我坚持:
git add my.file
git commit -m "blah blah"
Run Code Online (Sandbox Code Playgroud)