有个需求是这样的。
之前的提交记录如下:
commit0 --》 commit1 --》 commit2 --》 commit3
现在发现 commit1 这个位置需要做一些修改, 但是其他的 commit 我不打算修改。我想将 commit1 修改完重新生成一个 log ,但不影响其他位置的 commit ,完成后效果如下:
commit0 --》 commit1_new --》 commit2 --》 commit3
之所以需要这个需求,是因为需要做一个文档类的东西,每一个 log 是每章节的内容,提供给其他人浏览学习。
不知道这样的需求可以用什么方法满足。菜鸟谢谢大家。
|  |      1zxq1002      2017-04-24 07:53:07 +08:00 via Android rebase -i | 
|  |      2Biwood      2017-04-24 08:12:21 +08:00 via Android 先把 commit1 撤销掉(git revert commit1),然后重新添加 commit1 里的改动以及你要修改的地方。这样会生成两个新的提交,之前的记录都不会受影响。 | 
|      4Jakesoft      2017-04-24 08:18:27 +08:00 via iPhone 我的想法是,创建两个分支,然后在原来的分支 reset 到 commit0 ,然后提交 commit-new ,然后从其他分支“变基”过来或者 cherry-pick 剩余的 commit | 
|  |      5ProjectAmber      2017-04-24 08:19:48 +08:00 via iPhone git rebase -i <SHA1 of commit0> 对 commit1 选择 edit 编辑 git commit --amend git rebase --continue | 
|  |      6ryd994      2017-04-24 08:20:15 +08:00 via Android 你这做不到 hash 一样,最多内容一样而已 因为 hash 的一部分包括了 parent 信息 | 
|  |      7mahone3297      2017-04-24 09:25:27 +08:00 1 楼已经回答了。。。 | 
|  |      8sagaxu      2017-04-24 09:39:46 +08:00 via Android 这样太麻烦了,每次修改都要更改 commit history , git 就不适合做这个事情 | 
|  |      9jixiangqd      2017-04-24 09:51:18 +08:00 二楼才是比较好的解决方案,不会造成与远程冲突,不会有持续性蛋疼 | 
|  |      10sagaxu      2017-04-24 09:53:58 +08:00 via Android @jixiangqd 他是当文档用的,你不能把第二章写第五章的后面吧, revert 还会产生无用的章节,之前旧的章节也还在 | 
|  |      11chairuosen      2017-04-24 09:57:57 +08:00 为什么不打 tag?? | 
|  |      13SoloCompany      2017-04-24 23:00:41 +08:00 你应该通过手段修改项目目录架构,使得每一个章节都是一个独立的文件 至于让 commit log 和章节直接对应上,当然可以啊,写个脚本把所有文章从头到尾 commit 一次就可以了 但你这样干的的后果就是直接丢失了所有修订历史,这完全偏离了你使用版本管理系统的初衷 当然,也有折衷的方案,就是保留两个分支,比如分支 master 就是正常的分支,里面是正常的提交历史,另一个分支 demo 完全是使用脚本自动生成的,每次都会被强行覆盖(也就是没有真正的历史) |