在看到您对问题的更新后,以下两个选项之一可能会起作用,具体取决于您的使用情况:
第一种(也是更简单的)情况是您未发布的工作始终是一个提交序列,并且已发布的工作位于同一个分支上,但稍微落后一点:
- 你有一个
unpublished
分支和一个published
分支。后者包含在前者中(即后面的一些提交)。
- 保存操作意味着
abcdef
来自的哈希unpublished
现在应该是published
.
- 它执行
git checkout published && git merge --ff-only abcdef
。
- 这会导致
published
快进到该提交。
第二个是可以发布的提交不一定是线性序列。这变得有点复杂,就像您重新排序提交一样,您可能必须解决出现的冲突。我会通过以下方式解决这个问题:
- 再次假设有
unpublished
和published
分支。
- 保存操作包含来自
unpublished
.
publish-2013-04-15-001
它应该像从当前分支一样创建一个新的临时分支published
(新分支的名称在很大程度上无关紧要,只要它是唯一的/新的)。
- 对应保存的每个哈希执行
git cherry-pick <hash>
。(如果有多个提交,这就是你可能会遇到冲突的地方,可能需要以某种方式解决它们。)
- 完成后,检查
published
分支。
- 执行
git merge --squash -m 'Publish version <n>' publish-2013-04-15-001
。
- (可选)删除临时分支。
由于第二个选项引入了更多复杂性,因此您可能需要考虑其他选项以更轻松地调试已发布的进程:
- 我应该保留临时分支以进行跟踪/记录吗?
- 单个提交是否可以在合并的分支上分开(省略
--squash
)?
- 如果是这样,您可以通过强制合并提交 (
--no-ff
) 来识别保存。
编辑:这是一个使用--no-ff
. 每个版本$N
执行以下操作:
git checkout -b publish-$N published
# cherry-pick commits
git checkout published && git merge --no-ff publish-$N -m "Publish version $N"