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