first-contributions 如何用 git reset 把本地仓库回退到指定的上一个 commit【免费下载链接】first-contributions✨ Help beginners to contribute to open source projects项目地址: https://gitcode.com/gh_mirrors/fi/first-contributions在本地仓库例如 first-contributions 的本地贡献副本中做完若干 commit 后你可能需要撤销这些提交把仓库移回到某个更早的 commit。这篇文章基于仓库文档 Reset a commit 和 Undo local commits说明用git reset把本地仓库回退到指定上一个 commit 的完整路径先用git log --oneline查到目标 commit 的缩写哈希再执行git reset commithash完成回退最后用git log核对回退结果。先找到目标 commit 的哈希git reset需要引用一个 commit hash。Reset a commit 文档规定使用 commit hash 的前 7 个字符缩写哈希。在本地仓库中执行git log --oneline文档说明该命令会列出所有 commit 的概要每行包含两部分commit hash 的前 7 个字符也就是 reset 命令要引用的值和 commit message。Revert a commit 文档给出了这条命令的示例输出文档示例输出实际值以你本地仓库为准389004d added spacing in title c1b9fc1 Merge branch master into tutorials 77eaafd added tutorial for reverting a commit示例中每行开头的389004d等就是可直接用于 reset 命令的缩写哈希。在列表里定位你想回退到的那个 commit记下该行开头的 7 位哈希。执行 git reset 回退到指定 commit拿到哈希后用下面的命令执行回退把commithash替换为你在上一步记下的 7 位哈希git reset commithashReset a commit 文档对该命令的说明如下reset用于把仓库移回上一个 commit并丢弃该 commit 之后所做的改动文档同时说明git reset会把文件取消暂存、把改动带回工作目录文档对git reset与git revert的区分是前者把改动带回工作目录后者的用途是把 commit 从远程仓库移除。本文场景只回退本地仓库主路径就是git reset。验证回退结果回退后用git log查看分支的 commit 列表确认仓库已经停在目标位置。Check commit log 文档说明该命令的输出默认按时间倒序排列git log同一文档给出的示例输出文档示例输出$ git log commit e3fabb30ab536bd5876461d8a749301a321e714f (HEAD - check-commit-log-ko, upstream/main, origin/main, origin/HEAD, main) Author: Dan Yunheum Seol yunheum.seolmail.mcgill.ca Date: Tue Jun 4 01:07:25 2024 -0400 Add dan-seol to Contributors list (#84962) commit 4af4ec8a56e057ce8768af77eda528453974d0bc Author: Edgar Humberto Tijerina Tamez 168693312EdgarHTTusers.noreply.github.com Date: Mon Jun 3 23:06:05 2024 -0600 Add Edgar Tijerina to Contributors list (#84961)在这个示例输出中带HEAD - 分支名标记的 commit 行就是当前 commit。回退完成后重新执行git log该标记应出现在你指定的目标 commit 行上表示仓库已移回到该 commit。可选连同工作区改动一起彻底回退如果本地仓库改动已经乱掉、需要把 commit 指针回退的同时丢弃全部本地文件改动Undo local commits 文档提供了--hard模式git reset --hard--hard模式会让 Git 同时撤销工作目录中的全部改动除了重置暂存区外还会把所有文件改动恢复到上一个 commit 的状态。文档给出的完整示例文档示例crazy.php等为示例文件# Decided to start a crazy experiment # Create a new file crazy.php and add some code to it # Commit crazy.php $ git add crazy.php $ git commit -m Started a crazy dev # Edit crazy.php file again and changed a lot of other files # Commit all tracked files $ git add . $ git commit -m Continued dev # Tested and things went out of hand # Decided to remove the whole things $ git reset --hard HEAD~2文档说明git reset --hard HEAD~2会把当前分支同时向前回退 2 个 commit撤销你做的所有改动并刚创建的 2 个快照从项目历史中移除。这是按“相对位置”指定回退目标往前 2 个 commit的写法与前面按哈希指定的写法属于同一命令的不同参数形式。该文档同时给出了必须遵守的限制如果 commit 已经推送到共享仓库不要执行git reset --hard因为它会给该仓库上的所有人都带来问题。不同 git reset 用法的对照在决定下一步之前可以先对照仓库文档记录的几种git reset形式确认哪种符合你的目的命令文档说明的效果来源git reset commithash把仓库回退到指定 commit丢弃该 commit 之后的改动本文主路径Reset a commitgit reset无参数把暂存区重置到最新 commit工作目录的改动不受影响可以重新 commitUndo local commitsgit reset file只把指定文件移出暂存区文件中的改动仍保留Undo local commitsgit reset --hard同时重置暂存区和工作目录到上一个 commit丢弃全部本地改动Undo local commits也就是说无参数和git reset file只处理暂存区不会把仓库移回上一个 commit真正的“回退到指定 commit”由带哈希或HEAD~N这类相对引用的git reset完成是否加--hard决定工作区改动一并丢弃与否。【免费下载链接】first-contributions✨ Help beginners to contribute to open source projects项目地址: https://gitcode.com/gh_mirrors/fi/first-contributions创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考