使当前 git 工作副本等同于过去的提交
Make current git working copy equivalent to past commit
给定一个简单的 git 回购,我的分支当前设置为提交 C
:
A--B--C
我想“重置”staged/unstaged 的本地副本索引更改为与 A
相同。
但是,这是关键,我不想更改签出的分支指针。我不想重置回 A
。我希望当前未提交的更改 and/or 下一次提交 D
等同于 A
,同时保留以前的提交历史。
A--B--C--D
^ same as A
因此本地索引应该在 C
之上显示差异,以将回购更改回 A
状态。如果我然后提交该更改,它应该创建一个新的提交 D
相当于 A
.
如何使用 git 完成此操作?
如果有人问过这个问题,请提醒我注意重复问题。我无法搜索此行为。
给这只猫剥皮的方法有很多种。这是一种相当简单的方法:
git reset --hard A # (A)
git reset --soft C # (A-B-C) but with the reverse of B and C staged
git commit -m "Revert back to A" # (A-B-C-D)
现在比较 A 和 D 应该不会产生任何变化。
# revert back to commit A
git revert -n/--no-commit HEAD^^...HEAD
# make a commit D that is same as commit A
git commit -m 'revert to A'
有一种使用 Git 的 so-called 管道命令之一的快捷方法:git read-tree
。 运行 git read-tree -u <em>hash-or-other-commit-specifier</em>
在适当的时候,你现在在 Git 的索引和您的工作树中有来自指定提交哈希的文件的“干净”副本。
上面的短语“适当的时间”的意思是:当你有未完成的工作时不要这样做。如果 git status
说 nothing to commit, working tree clean
你身体很好。
给定一个简单的 git 回购,我的分支当前设置为提交 C
:
A--B--C
我想“重置”staged/unstaged 的本地副本索引更改为与 A
相同。
但是,这是关键,我不想更改签出的分支指针。我不想重置回 A
。我希望当前未提交的更改 and/or 下一次提交 D
等同于 A
,同时保留以前的提交历史。
A--B--C--D
^ same as A
因此本地索引应该在 C
之上显示差异,以将回购更改回 A
状态。如果我然后提交该更改,它应该创建一个新的提交 D
相当于 A
.
如何使用 git 完成此操作?
如果有人问过这个问题,请提醒我注意重复问题。我无法搜索此行为。
给这只猫剥皮的方法有很多种。这是一种相当简单的方法:
git reset --hard A # (A)
git reset --soft C # (A-B-C) but with the reverse of B and C staged
git commit -m "Revert back to A" # (A-B-C-D)
现在比较 A 和 D 应该不会产生任何变化。
# revert back to commit A
git revert -n/--no-commit HEAD^^...HEAD
# make a commit D that is same as commit A
git commit -m 'revert to A'
有一种使用 Git 的 so-called 管道命令之一的快捷方法:git read-tree
。 运行 git read-tree -u <em>hash-or-other-commit-specifier</em>
在适当的时候,你现在在 Git 的索引和您的工作树中有来自指定提交哈希的文件的“干净”副本。
上面的短语“适当的时间”的意思是:当你有未完成的工作时不要这样做。如果 git status
说 nothing to commit, working tree clean
你身体很好。