如何放弃对单个文件的更改并用新的HEAD副本覆盖它?我想对单个文件执行git reset --hard。
git reset --hard
要将my-file.txt的工作副本及其在Git索引中的状态重置为HEAD的工作副本:
my-file.txt
git checkout HEAD -- my-file.txt
--表示"将此点之后的每个参数视为文件名"。更多细节在这个答案中。感谢VonC指出这一点。
--
要将单个文件硬重置为HEAD:
git checkout @ -- myfile.ext
请注意,@是HEAD的缩写。旧版本的git可能不支持该缩写形式。
@
HEAD
要将单个文件硬重置为索引,假设索引非空,否则重置为HEAD:
git checkout -- myfile.ext
关键是要安全,只有您不希望从命令中省略#0或#1,除非您特别想要重置为索引。
您可以使用以下命令重置单个文件
git checkout HEAD -- path_to_file/file_name
列出所有更改的文件以使用以下命令获取path_to_file/filename
path_to_file/filename
git status
一个简单,容易,动手,让你摆脱困境的方法,特别是如果你对git不太舒服:
查看文件的日志
git日志myFile.js
提交1023057173029091u23f01w276931f7f42595f84f作者: kmiklas日期:2018年8月7日星期二09:29:34-0400
JIRA-12345-使用新架构重构。
注意文件的哈希:
1023057173029091 u 23 f 01 w 276931 f 7 f 42595 f 84 f
使用哈希显示文件。确保它是你想要的:
git show 1023057173029091u23f01w276931f7f42595f84f:./myFile.js
将文件重定向到本地副本
git show 1023057173029091u23f01w276931f7f42595f84f:./myFile.js>myFile.07aug2018.js
备份当前文件。
CPmyFile.jsmyFile.bak.js
在您喜欢的文本编辑器中打开这两个文件。
vimmyFile.jsvimmyFile.07aug2018.js
将粘贴代码从myFile.07aug2018.js复制到myFile.js,然后保存。
提交并推送myFile.js
再次查看日志,并确认您的文件已正确就位。
告诉你的客户拉最新的,愉快地看着它与旧版本一起工作。
不是最性感的,也不是最以git为中心的解决方案,绝对是“手动”重置/恢复,但它有效。它只需要最少的git知识,并且不会干扰提交历史记录。
要恢复到上游/主do:
git checkout upstream/master -- myfile.txt
您可以使用以下命令:
git reset -- my-file.txt
这将在添加时更新my-file.txt的工作副本。
git checkout filename
如果您有一个具有相同文件名的分支,则必须使用此命令:
git checkout -- filename
没有必要引用HEAD。
git checkout -- file.js就够了
git checkout -- file.js
自git 2.23(2019年8月)起,您可以使用#0(更多信息):
git restore pathTo/MyFile
上面将在当前分支的HEAD(最后一次提交)上恢复MyFile。
MyFile
如果您想从其他提交中获取更改,您可以回溯提交历史记录。下面的命令将获得MyFile前两个提交。您现在需要-s(--source)选项,因为现在您在恢复源代码时使用master~2而不是master(默认值):
-s
--source
master~2
master
git restore -s master~2 pathTo/MyFile
您也可以从其他分支获取文件!
git restore -s my-feature-branch pathTo/MyFile