起点:
Dev: A -- B -- C
Feat: \ -- D
然后将一些新提交提交到Dev
:
Dev: A -- B -- C -- NEW
Feat: \ -- D
然后意外地导致Dev
上的提交哈希发生更改*(并与push
和--force
一起更改)
大写字母和小写字母表示相同的补丁-但提交哈希不同:
Dev: a -- b -- c -- NEW
Feat: A -- B -- C -- D
现在我想从rebase
Feat
Dev
,但是相同的补丁被识别为不同的提交,并且rebase
从A
开始而不是{ {1}}:
D
请帮助!!!
*也许您可以告诉我如何将它们改回来:我在Dev上运行了一个交互式behavior: a -- b -- c -- NEW -- A -- B -- C -- D
expected: a -- b -- c -- NEW -- D (and recognize that A and a are actually the same)
,以便仅使用rebase
选项更改提交消息。然后我意识到提交哈希发生了变化,因此我回到了r
-在使用reset
进行交互式变基之前。但是现在提交消息已经过时了,但是提交哈希仍然不同!!!
答案 0 :(得分:1)
在这种情况下,您应该使用cherry-pick
而不是rebase
还原对dev的更改(您希望重新定位的位置,是新的更改)。
git reset --hard <last NEW changes commit>
通过本地dev分支与远程dev同步
现在cherry-pick
从功能分支提交并应用于开发
git cherry-pick <commit-ids from feat branch> //commit ids seprate with space
答案 1 :(得分:0)
您如何准确地基于哪个分支和哪个命令?
您可以做的是,在使用feat分支时,使用dev重新构建feature分支
git rebase master
它应该可以正常工作。
如果一切都坏了,则可以使用git reflog
。它将向您显示本地存储库中发生的事件的列表。在您犯错之前复制事件的哈希,然后运行
git reset --hard <reglog-sha>
它将重置历史记录上的所有内容
答案 2 :(得分:0)
您可能可以:
现在,您将在'dev'上进行'feat'分支更改
例如,如果仅对“ feat”执行一次提交,则以下命令应起作用
(它也适用于n次提交。您需要在新分支上应用那么多补丁)
git checkout feat
git format-path HEAD~1
git branch -D feat
git checkout dev
git checkout -b feat
git am -3 patch-file-created-using-format-patch
git push -f origin feat