Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 删除错误重基后引入的重复提交_Git_Version Control_Rebase - Fatal编程技术网

Git 删除错误重基后引入的重复提交

Git 删除错误重基后引入的重复提交,git,version-control,rebase,Git,Version Control,Rebase,我有两个分支,master和feature。Master偶尔会收到一些小的调整,这些调整是快速上线所必需的。完成这些调整后,master将重新设置为feature,以便该功能保持最新 在master上更改的文件通常与功能上的大部分开发无关,但我遇到了大量复杂的3路合并冲突 在查看了功能的提交日志之后,我发现问题重复了好几次,我正试图通过交互式重新基址来解决它 我的问题是: 这是解决这个问题的最佳方案吗?如果是的话,我可以放弃重复的内容,从本质上构建我期望的历史吗?另外,我会删除哪些副本,更高(旧

我有两个分支,
master
feature
。Master偶尔会收到一些小的调整,这些调整是快速上线所必需的。完成这些调整后,
master
将重新设置为
feature
,以便该功能保持最新

在master上更改的文件通常与
功能
上的大部分开发无关,但我遇到了大量复杂的3路合并冲突

在查看了
功能的提交日志之后,我发现问题重复了好几次,我正试图通过交互式重新基址来解决它

我的问题是:

这是解决这个问题的最佳方案吗?如果是的话,我可以放弃重复的内容,从本质上构建我期望的历史吗?另外,我会删除哪些副本,更高(旧的原件)或更低(新的副本)

摘要列表摘自
git-rebase-master-i

pick 0eb277c Commit A
pick ced2556 Commit B
pick 640e049 Commit C
pick b248ff7 Commit D
pick 9903094 Commit E
pick ebc279d Commit A
pick 313385b Commit F
pick 0d55178 Commit G
pick c8f09f9 Commit H
pick e877be3 Commit I
pick 9859aa0 Commit J
pick c3c8e0f Commit K
pick 8abc68c Commit L
pick 84a5c89 Commit A
pick 30570e4 Commit B
pick 937ff2f Commit C
pick 8e6d911 Commit D
pick 1dd3a09 Commit E
pick fe79288 Commit F
pick 9e790bb Commit G
pick 0924916 Commit H
pick 90d59d7 Commit I
pick ba06c55 Commit J
pick 7452fad Commit K  ** Dupes end here** and features then has 30+ more commits.
pick d1dca3d Commit M
pick 6c85f76 Commit N
pick ad53b78 Commit O
pick f166471 Commit P

要删除重复的提交,您必须浏览由git rebase master-i生成的列表,并通过使用箭头键在列表中上下导航来删除重复的提交,按d键可以删除要删除的提交

master
可替换为commmit哈希或任何有效的re基点)

一旦您删除了所有重复项,并且有了一个提交列表,该列表显示了您期望的历史记录的外观,请按esc键并键入
,退出重新基准屏幕!wq
并按enter键


然后,re base将继续并将您选择的提交列表应用到您的re基点上。

您可以使用
git rebase-i HEAD~x
替换
x
,使用您希望从上到下查看的任何提交数量,例如
git rebase-i HEAD~3
这将为您提供最后三次提交。然后,您可以选择要保留的提交和要删除的提交。提交0eb277c和ebc279d都标记为提交A,但显然它们的sha1不同,因此它们是不同的提交。事实上,我在sha1列表中没有看到任何重复的提交。我的意思是重复的,提交消息是相同的,应用的代码是相同的。但它被复制并保存为新的提交。