Git 常用命令总结

本文最后更新于 2025年2月11日

注意:

  1. 本文重点介绍某些功能的实现方法,不会详细介绍每一个指令的用法,具体用法请查阅官方文档官方文档 - 中文等。
  2. 远程仓库以 GitHub 为例。
  3. 执行覆盖操作时,请务必谨慎,随时备份重要数据;多人协作时,请遵守团队规范。

设置用户名和邮箱

1
2
git config --global user.name "your name"
git config --global user.email "your email"

--global 表示全局设置,如果只想对当前仓库生效,去掉 --global 即可。

注意:

  1. 不要把 –global 参数放在 user.nameuser.email 之后,否则会把 --global 当作用户名或邮箱。
  2. 本地的用户名和邮箱建议和 GitHub 设置的一致。
  3. 为防止泄露个人信息,在使用 GitHub 前,切记Settings->Emails 中勾选 Keep my email addresses private,然后把邮箱设置为下面给出的类似于 123456+user@users.noreply.github.com

初始化本地仓库和远程仓库

  1. 初始化本地仓库

    1
    git init
  2. 创建远程空仓库 (如果没有)

    登录 GitHub,点击右上角 +,选择 New repository,填写信息,点击 Create repository。输入仓库名,其余保持默认即可,点击 Create repository

  3. 关联本地仓库和远程仓库

    1
    git remote add origin <远程仓库地址>

    这一步也可以使用 Visual Studio 的可视化操作:管理远程存储库,设置名称为 origin,URL 为远程仓库地址。

  4. 将本地仓库内容推送到远程仓库

    1
    git push --set-upstream origin master

    注:如果是第一次推送且本地无 commit,执行会报错:

    1
    2
    error: src refspec master does not match any
    error: failed to push some refs to <your remote repository>

    请先暂存更改 git add . 并提交 git commit -m "init"

撤销已 commit 的更改

  1. 保留更改到暂存区
1
git reset --soft HEAD~1
  1. 删除更改
1
git reset --hard HEAD~1

修改某个 commit 的 message

假设修改第 n 个 (以最近的 commit 为 1) commit 的 message:

1
git rebase -i HEAD~n

在弹出的编辑器中,将需要修改的 commit 前的 pick 改为 reword,保存并关闭编辑器。接着会弹出一个新的编辑器,修改 message 后保存并关闭编辑器。

rebase 时请注意:(来自官方文档)

变基的风险

合并多个 commit

假设合并最近的 n 个 commit:

方法一:

1
git rebase -i HEAD~n

在弹出的编辑器中,将需要合并的 commit 前的 pick 改为 squash,保存并关闭编辑器。接着会弹出一个新的编辑器,修改 message 后保存并关闭编辑器。

方法二:

1
2
git reset --soft HEAD~n
git commit -m "new message"

强制推送

1
git push --force

多人协作时不建议使用,必要时可以使用 git push --force-with-lease。它会检查远程仓库是否有新的更改,如果有则拒绝推送。

批量修改提交者信息

新建一个.mailmap 文件,格式为以下之一:

1
2
3
Correct Name <correct@email.com> Wrong Name <wrong@email.com>
Correct Name <correct@email.com> <wrong@email.com>
<correct@email.com> <wrong@email.com>

例如:

1
user1 <1@1.com> user2 <2@2.com>

再执行:

1
2
git filter-repo --mailmap .mailmap --force
git push --force

.mailmap 代表该文件的路径,可以手动指定。

注意:批量修改提交者信息可能会改变未修改提交信息的提交的哈希值,详见这篇文章。这可能会导致 fork 的仓库无法同步,因此请谨慎操作。


Git 常用命令总结
https://refrain69.pages.dev/git-commands/
发布于
2025年2月10日
更新于
2025年2月11日
许可协议