【问题标题】:Undo git add, commit and push WITHOUT losing untracked files撤消 git add、commit 和 push 而不会丢失未跟踪的文件
【发布时间】:2023-09-10 09:44:02
【问题描述】:

我不小心将我所有未跟踪的文件添加、提交和推送到了远程仓库,在那里它们会让我的合作者感到厌烦。

从那以后,我又做了两个提交,其中一个是通过 git pull 与远程合并。

我想撤消这一系列操作并将我的目录恢复到之前的状态(包括未跟踪的文件)。

使用我尝试过的所有命令(checkout、revert、reset、rebase),我的未跟踪文件由于撤消提交而丢失。

我该怎么办?

【问题讨论】:

    标签: git git-rebase undo git-reset git-revert


    【解决方案1】:
    1. git log
    2. copy hash of the commit that you accidentally pushed
    3. git revert HEAD
    4. git push
    5. git cherry-pick HASHFROMSTEPTWO
    

    这将还原您的更改并将其推送给您的主服务器,以便其他人不再需要查看您的文件。然后,第 5 步将带回您在原始提交中所做的所有文件和更改,并将其添加到还原的顶部。

    【讨论】:

    • 我唯一要补充的是:git cherry-pick -n commitid 因为我认为他不想再做同样的提交
    • 我有多个提交,包括我想撤消的合并。我猜 git revert HEAD 只会恢复最后一次提交。我该怎么办?
    • @David - 您可以将 HEAD 替换为您要保留的最后一次提交的哈希值。所以:git revert HASH
    • 执行此操作后仍会跟踪文件。有没有办法撤消添加?有很多未跟踪的文件,我不打算在短期内提交,而且需要大量的工作来找出并手动 git rm 它们。
    • @aashnisshah:我认为语法不正确。默认是指定要撤消的提交列表。我认为正确的语法是 commitid..HEAD
    最近更新 更多