它是仅限本地的存储库。没有分支。日志显示
HEAD->master A
9812 B
4578 C
我想让当前的工作目录与C相同,编辑一些文件,替换一些二进制文件(PDF)并进行新的提交,比如ModC。因此,新日志将是:
HEAD->master ModC
7845 A
9812 B
4578 C
似乎很简单。但我一直在努力,面对各种各样的分支,合并,重组,重置!
达到我想要的目标是什么?这是一种确定的,万无一失的方式?
答案 0 :(得分:1)
我想让当前的工作目录与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
可用于将分支移动到您想要的任何位置,例如将主分支移回C.
git checkout master
git reset --hard C
现在你有了这个。
HEAD->master C
好像A和B从未发生过。现在,您可以像往常一样在C之上添加和提交更改。
有一个更强大的工具称为“交互式反叛”,以摧毁历史,但你也可以真正搞砸了。 You can read more about that in the Pro Git book
答案 1 :(得分:1)
以下是实现这一目标的方法:
# 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
的内容放在磁盘上