最近,我将现有的代码库从tfs迁移到了azure devops git。由于许多障碍,最后约20次提交未成功迁移。由于时间限制,我决定只将最新的代码库复制到最近成功迁移的git commit上,并将其作为新的提交提交。从那时起,我们一直在致力于这一承诺。
但是现在我设法检索了在迁移过程中被跳过的提交。我希望修复git提交的历史记录。但是我知道git的黄金法则,一旦提交了历史,就不要弄乱历史。
因此,我的问题是:
答案 0 :(得分:2)
您将能够将这些更改推到原始位置吗?
这取决于来源的配置方式。 您将使用的语法是
git push -f origin <commit id>:master
进行强制推送。但是,出于明显的原因,某些服务器禁止非管理员角色使用此功能。
将这些更改推到原始位置时,是否会在其他人拉动时自动检索它们?
它们将被检索。真正的问题是他们的本地提交是否适用。我的答案还不太清楚。我相信这可能取决于原始提交的性质。
您当然可以在本地对其进行测试。设置本地分支mastertmp
,该分支是旧主HEAD的副本。
git checkout -b mastertmp <commit id of current master>
设置另一个跟踪它的分支:
git checkout -b worktmp -t mastertmp
(出于真实性,可能会向worktmp
添加更多提交。没有必要。)
现在,将其指向您建议的新历史记录来“返工” mastertmp
git checkout mastertmp
git reset --hard <commit id of reworked master>
现在将分支更改回worktmp
并拉动。
git checkout worktmp
git pull --rebase
如果这行得通,那么没有理由对您的同事不起作用。不论您是worktmp
跟踪本地分支还是远程分支,逻辑上都没有关系。
注意:要跟踪哪个分支跟踪哪个分支,请使用命令git branch -vv
。