git 在主文件中还原已删除的文件,保持功能工作文件完好无损



在本地'myfeature'分支中工作时,我删除了一些文件并在本地提交它们。 在此过程中,这些提交随后与远程源/主合并。 我需要找回那些已删除的文件,所以我对最新的 master 进行了git pull,并剪切了一个"修补程序"分支,其中我:

git revert <commit id>

以那些错误提交的时间倒序排列,并取回那些已删除的文件。 我基于 git-flow 分支模型,所以如果我错了,请纠正我,我现在应该将"修补程序"合并到 master 中,以及任何"发布"分支、开发和任何其他"功能"分支?

是否需要对我当前仍在进行的"myfeature"分支执行任何操作,我想在其中删除这些文件? 合并"myfeature"后,这些文件会保持删除状态,还是在合并时这些文件会复活?

我没有使用 git-flow,只是使用模型。

关于取回已删除的文件:

如果你的历史记录看起来像这样:

* aa1234 last commit
* bb2345 commit
* cc3456 commit
* dd4567 deleted fileC dirD/fileD & made other changes
* ee5678 deleted filA  dirB/fileB & made other changes
* ff6789 commit

并且您想像删除文件时一样取回文件 A,B,C,D,您可以使用git checkout <hash> -- <path/to/file>逐个检查它们:

git checkout ee5678 -- fileA
git checkout ee5678 -- dirB/fileB
git checkout dd4567 -- fileC dirD/fileD

这样,您可以确保其他修改的安全。

关于流程:我不太明白您正在使用哪个流程,但是如果您创建一个提交,其操作是重新创建已删除的文件,那么是的,在其他分支中合并此提交将应用相同的操作。

如果您还原提交,那么是的,该提交的所有更改都会还原,但除此之外没有其他更改。因此,如果您的错误更改被隔离在提交中,您可以简单地还原这些更改,同时保留良好的提交。

但是,如果你的提交是好行为和坏行为混合在一起的,那么在像这样恢复它们时,你也会失去这些好行为,所以我建议你不要这样做。

相反,您应该进行部分还原。通常,在使用 -n 标志执行还原时,您可以更好地控制还原。这样 Git 就不会为你创建恢复提交,你可以先操作更改,然后再自己提交。此外,这允许您一次进行多次还原。因此,理想情况下,当有多个提交一起引入了您不再需要的更改时,您可以在一次提交中将它们全部还原以修复它。

最新更新