转到上一个提交,进行更改并作为新负责人提交
Go to a previous commit, make changes and commit as new head
这是一个仅限本地的存储库。没有分支机构。日志显示
HEAD->master A
9812 B
4578 C
我想使当前工作目录与 C 相同,编辑一些文件,替换一些二进制文件 (PDF) 并进行新提交,例如 ModC。因此,新日志将是:
HEAD->master ModC
7845 A
9812 B
4578 C
看起来很简单。但我一直在挣扎,面对各种分支、合并、变基、重置!
实现我想要的目标的可靠、万无一失的方法是什么?
I want to make the current working directory same as C
您可以使用 git revert
恢复 C 之后的更改。
git revert C..HEAD
这将创建一个还原 A 和 B 的新提交。
HEAD->master Revert A & B
7845 A
9812 B
4578 C
现在工作目录将与 C 中的相同。然后您可以正常进行更改,添加并提交它们。然后你就会有这个。
HEAD->master ModC
3847 Revert A & B
7845 A
9812 B
4578 C
You can read more about how to undo changes in the Pro Git book.
你也可以让 A 和 B 永远不会与 git reset
发生。 git reset
可用于将分支移动到您想要的任何位置,例如将 master 移回 C。
git checkout master
git reset --hard C
现在你将拥有这个。
HEAD->master C
就好像A和B从未发生过一样。现在您可以像往常一样在 C 之上添加和提交您的更改。
有一个更强大的工具,叫做 "interactive rebase" 来扰乱历史,但你也可以用它来搞砸事情。 You can read more about that in the Pro Git book.
这里有一个方法可以实现:
# get content of 'C' commit (without creating any commit yet) :
git checkout 4578 -- . # <- the '.' is very important. see below
# edit whatever files you want ...
# make regular commit with your new content :
git add <files>
git commit
细微差别:
git checkout 4578
将 将活动提交设置为 4578
并将提交 4578
的内容放入磁盘
git checkout 4578 .
# or
git checkout 4578 -- .
将不触及当前活动提交并将提交4578
的内容放在磁盘上
这是一个仅限本地的存储库。没有分支机构。日志显示
HEAD->master A
9812 B
4578 C
我想使当前工作目录与 C 相同,编辑一些文件,替换一些二进制文件 (PDF) 并进行新提交,例如 ModC。因此,新日志将是:
HEAD->master ModC
7845 A
9812 B
4578 C
看起来很简单。但我一直在挣扎,面对各种分支、合并、变基、重置!
实现我想要的目标的可靠、万无一失的方法是什么?
I want to make the current working directory same as C
您可以使用 git revert
恢复 C 之后的更改。
git revert C..HEAD
这将创建一个还原 A 和 B 的新提交。
HEAD->master Revert A & B
7845 A
9812 B
4578 C
现在工作目录将与 C 中的相同。然后您可以正常进行更改,添加并提交它们。然后你就会有这个。
HEAD->master ModC
3847 Revert A & B
7845 A
9812 B
4578 C
You can read more about how to undo changes in the Pro Git book.
你也可以让 A 和 B 永远不会与 git reset
发生。 git reset
可用于将分支移动到您想要的任何位置,例如将 master 移回 C。
git checkout master
git reset --hard C
现在你将拥有这个。
HEAD->master C
就好像A和B从未发生过一样。现在您可以像往常一样在 C 之上添加和提交您的更改。
有一个更强大的工具,叫做 "interactive rebase" 来扰乱历史,但你也可以用它来搞砸事情。 You can read more about that in the Pro Git book.
这里有一个方法可以实现:
# get content of 'C' commit (without creating any commit yet) :
git checkout 4578 -- . # <- the '.' is very important. see below
# edit whatever files you want ...
# make regular commit with your new content :
git add <files>
git commit
细微差别:
git checkout 4578
将 将活动提交设置为 4578
并将提交 4578
的内容放入磁盘
git checkout 4578 .
# or
git checkout 4578 -- .
将不触及当前活动提交并将提交4578
的内容放在磁盘上