常用Git命令汇总+Git使用难点场景解决方案

2025-06-07

常用Git命令汇总+Git使用难点场景解决方案

Git 命令

  • git restore .- 将文件恢复到上一次提交/撤消所有尚未提交的本地更改。

  • git restore index.html- 仅将特定文件恢复到最近的提交/撤消该文件的所有本地/未提交的更改。

  • git reset --hard <hash code of the commit>- 删除提交并返回到该哈希码的提交

  • git checkout <hash code of the commit> -- <path/to/file>- 仅针对特定文件返回具有该哈希码的提交。回滚完成后,您需要创建一个新的提交。

  • git commit --amend -m 'Your message'- 帮助重写消息

  • git revert <hash code>- 通过为某个提交创建新的提交来帮助回滚到之前的提交。它不会像之前那样删除这些log提交git reset

  • git reflog- 这对于恢复已删除的提交/文件/更改非常有用。用于git reset <hash code of lost commit from reflog>恢复回滚的更改。

  • git reset HEAD~2- 帮助回滚 2 次提交并取消暂存这 2 次已删除提交中的所有更改。

  • git reset HEAD~2 --hard- 帮助回滚 2 次提交,但永久删除这 2 次提交中的所有更改。

  • git rebase(最有用的命令)- 在另一个基本提示之上重新应用提交。例如,git rebase master将分支设置为主分支的尖端

使用Git时遇到的困难场景的解决方案:

1. 将已提交的更改移动到新分支:(场景:您意外地在主分支上工作)

  • - 使用git checkout -b new-feature
  • - 然后使用以下命令在主服务器上回滚提交git reset HEAD~1 --hard:(此命令将回滚 1 个提交)

2. 存储(示例场景:您需要在新分支上工作/切换,但不在当前分支上进行提交)

关于 git stashing 的全部内容:
  • git stash当您想要记录工作目录和索引的当前状态,但希望返回到干净的工作目录时使用。该命令会保存您的本地修改,并还原工作目录以匹配 HEAD 提交。
  • 此命令存储的修改可以用 列出git stash list,用 进行检查git stash show,并用 恢复(可能在不同的提交之上)git stash apply。不带任何参数调用git stash等同于git stash push

  • git stash

    • stashes/ 将更改保存在项目后面/项目的另一个目录中,并且控件移回到最后一次提交的最后一个工作副本。
    • 将更改保存为草稿并返回上次提交的代码。
  • git stash push -m "Message"- 将存储消息添加到存储列表


  • git stash list- 在项目后台列出所有草稿变更。

    提示:存储列表存储所有存储,每个存储的功能/代码都有一个唯一的索引号。最后添加的存储始终显示在顶部,索引为 0。


  • git stash apply- 将最后存储的草稿应用到我们当前的工作目录


  • git stash apply <index number>- 将特定的索引存储应用到我们当前的工作目录


  • git stash drop <index number>- 将存储从具有特定索引的存储列表中删除


  • git stash pop- 将最后的草稿更改弹回到工作目录/工作分支上,然后将该草稿从存储列表中删除


  • git stash pop <index number>- 将具有特定索引的草稿更改弹出回工作目录/工作分支,然后将该草稿从存储列表中删除


  • git stash clear- 清除/删除所有存储的草稿更改

最终解决方案使用存储-

  • - 首先使用以下方法将所有更改添加到暂存区git add .
  • git stash- 使用命令存储更改。
  • - 转到您的新分支并使用命令git stash apply

3. 使用 cherry-pick 将已提交的更改移动到已经存在的分支(场景:当已经存在该功能的专用分支时,您意外地在 master 上工作):

  • -git checkout feature-branch
  • -git cherry-pick <hash code of that commit on master>
  • -git checkout master
  • - git reset HEAD~1 --hard(回滚 1 次提交)

注意:
此场景也可以使用 #2 中解释的存储方法来解决。您可以存储更改,然后使用 将这些更改应用到新分支git stash apply

4. 压缩提交(场景:由于错误,你做了一堆额外的提交,并且你想将提交合并为一个新的提交消息)-

  • git rebase -i <hash code of the commit above which all the commits need to be squashed>
    • i 代表互动壁球
    • 在 vim 编辑器中打开压缩功能,您可以在其中选择或压缩并更新提交消息。

5. Bisect(场景:代码中引入了一个错误,但你不知道哪个提交引入了该错误)-

  • 使用二进制搜索来查找引入错误的提交。

程序-

  1. git bisect start- 开始搜索过程以查找错误的提交。

  2. (可选)使用命令git bisect good <hash-code of the commit that you are sure doesn't have the bug>- 通常这是第一次或第二次提交,并告诉 git 从中间开始。

  3. git 将开始自行检查提交,您必须测试提交并使用命令让 git 知道提交是否有错误,

    • git bisect good- 如果提交没有问题
    • git bisect bad- 如果提交有错误。
  4. 给出反馈后,git 会生成一个反馈树,用于返回导致 bug 的提交/第一个错误提交,你可以复制它的哈希码。引用refs/bisect/bad将保留指向该提交的位置。

  5. 在二分会话之后,要清理二分状态并返回到原始 HEAD,请发出以下命令:

  6. git bisect reset- 默认情况下,这会将您的树返回到 git bisect start 之前签出的提交。

  7. git bisect reset <commit>- 例如,git bisect reset bisect/bad将检出第一个错误的修订,同时git bisect reset HEAD将让您停留在当前的二分提交,并完全避免切换提交。

  8. git revert <hash-code of the bad commit>- 用于恢复在代码中引入错误的错误提交中所做的更改。

6. 过滤分支(场景:您想要从之前的提交中删除特定文件,无论是大文件还是意外上传的任何 API 密钥)-

git filter-branch --index-filter 'git rm --cached --ignore-unmatch filepath' HEAD
Enter fullscreen mode Exit fullscreen mode
  • 重写包含特定文件的任何提交,同时将其从提交中删除。
  • 从提交开始搜索HEAD
  • --ignore-unmatch如果找不到文件,则有助于避免错误。
  • 提交时间和其他属性保持不变,只有当找到特定文件并从该提交中删除时,提交的 SHA/Hash 才会更新。

7. 你的提交没有出现在你的 GitHub 图表中:

  • 这种情况主要发生.gitconfig在您系统中的文件中设置的用户名或电子邮件与您的 GitHub 帐户上的用户名和电子邮件不同时。

解决方案-

git filter-branch --env-filter '
if [ "$GIT_COMMITTER_EMAIL" = "<Old Email>" ];
        then
                GIT_COMMITTER_NAME="<New Name>";
                GIT_AUTHOR_NAME="<New Name>";
                GIT_COMMITTER_EMAIL="<New Email>";
                GIT_AUTHOR_EMAIL="<New Email>";
                git commit-tree "$@";
        else
                git commit-tree "$@";
        fi' HEAD
Enter fullscreen mode Exit fullscreen mode

8. 将特定文件重置为 HEAD/删除添加到特定文件的新更改。

  • 使用命令git checkout HEAD -- <file-name>将特定文件中所做的更改重置为上次提交的状态。

奖励命令-

使用 git 创建 zip 文件:

git archive --format=zip --output project.zip master
Enter fullscreen mode Exit fullscreen mode

此命令将输出 master 分支的 zip 文件,并且不包含 中提到的文件.gitignore


与我联系-

文章来源:https://dev.to/pranav016/rare-useful-git-commands-summarized-solution-to-difficult-scenarios-while-using-git-3m4i
PREV
高效地大规模管理 React 表单
NEXT
高级 JavaScript 系列 - 第一部分:幕后(JavaScript 引擎、ATS、隐藏类、垃圾回收)