我想将git工作副本的文件恢复到给定的提交,而不将该提交设置为HEAD提交.
如果我git checkout到给定的提交,我获得一个分离的HEAD,并在提交更改后,提交树看起来像这样:
A
|
B
|
C
| \
D E
Run Code Online (Sandbox Code Playgroud)
虽然我想获得的行为是:
A
|
B
|
C
|
D
| <- git command so my files are restored to C, but my HEAD still points to D
E
Run Code Online (Sandbox Code Playgroud)
谢谢
Von*_*onC 17
这应该这样做:
git reset --hard C
git reset --soft D
Run Code Online (Sandbox Code Playgroud)
首先,您将HEAD
索引和工作树重置为C
.
然后你重置HEAD
(并且只有HEAD
,如" 实际用途git reset --soft
? "中所述)D
.
请注意,此时提交将创建一个包含内容的新提交C
,替换D
为D'
类似的内容C
.
这改变了历史,与简单的差别不大git reset --hard C
.
另一种选择可以在历史git revert C
上D
,但D
仍然可以在历史中看到,这可能是你不想要的.
Wil*_*eer 16
VonC回答要求您进行往返.你可以通过一个'git checkout'实现同样的目标
git checkout C ./
请注意,您必须提供./
否则git将实际检出指定的分支或提交.
用于此的管道命令(对于编写此类内容的任何人)是:
git read-tree C
git checkout-index -f -a
Run Code Online (Sandbox Code Playgroud)
虽然由于某种原因我无法理解,但当我从脚本运行它时,我还必须在上述命令之后执行以下操作,否则我会收到有关补丁不适用于索引的错误:
git update-index -q --refresh
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2534 次 |
最近记录: |