我对文件提交了许多提交:
我相信我在提交C中引入了一个错误。我想在那个文件上删除Commit C中引入的所有更改,而不会影响其他更改,因此它看起来像A - > B - > D - >即
答案 0 :(得分:2)
你可以试试这个:
backup_branch
)。git log
)。git reset --HARD committish_b
恢复提交B,其中committish_b
是您为提交B的提交哈希找到的任何内容。执行此操作后,您将丢失在目标分支上提交B后所做的所有更改。git cherry-pick committish_d
和git cherry-pick committish_e
将D和E提交到目标分支。答案 1 :(得分:1)
每次提交都附带一个哈希值。
假设commit C
的哈希是abc123
你可以做一个简单的git revert <hash>
$ git revert abc123
git revert命令撤消已提交的快照。但是,它不是从项目历史记录中删除提交,而是指出如何撤消提交引入的更改,并使用生成的内容附加新提交。这可以防止Git丢失历史记录,这对于修订历史记录的完整性和可靠的协作非常重要。
修改强>
根据您的评论,您只想恢复文件而不是整个提交。如果是这种情况,请考虑以下事项:
提交B的散列为abc456
。
$ git checkout abc456 -- /path/to/file.ext
答案 2 :(得分:0)
git checkout commitE-SHA
git checkout commitB-SHA / path / to / file
(然后照常提交)
这将创建一个新的提交来撤消一个文件中的更改。
这比尝试重写历史记录或从历史记录中删除错误的提交或错误文件更好(更安全,更容易,更容易混淆)。