目录

Git 常用命令总结

介绍一些 Git 常用命令。

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

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

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

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

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

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

    git remote add origin <远程仓库地址>
  4. 暂存并创建 commit

    git add .
    git commit -m "message"
  5. 将本地仓库内容推送到远程仓库

    git push --set-upstream origin master
  1. 保留更改到暂存区

    git reset --soft HEAD~1
  2. 删除更改

    git reset --hard HEAD~1

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

git rebase -i HEAD~n

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

假设合并最近的 n 个 commit:

方法一:

git rebase -i HEAD~n

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

方法二:

git reset --soft HEAD~n
git commit -m "new message"
git push --force

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

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

Correct Name <correct@email.com> Wrong Name <wrong@email.com>
Correct Name <correct@email.com> <wrong@email.com>
<correct@email.com> <wrong@email.com>

例如:

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

再执行:

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

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

警告
批量修改提交者信息可能会改变未修改提交信息的提交的哈希值。这可能会导致 fork 的仓库无法同步,因此请谨慎操作。
  1. 添加上游远程仓库

    git remote add upstream <原仓库地址>
  2. 获取上游远程仓库的更改

    git fetch upstream
  3. 切换到本地的主分支

    git checkout <主分支名称>
  4. 将上游远程仓库的更改应用到本地分支

    • 使用 merge 方法

      git merge upstream/<主分支名称>

      如果有冲突,你会看到类似如下的信息:

      <<<<<<< HEAD
      你的代码
      =======
      上游的代码
      >>>>>>> upstream/main

      你需要手动编辑冲突的文件,并删除所有标记 (<<<<<<<, =======, >>>>>>>),然后保存文件。

      解决所有冲突后,执行:

      git add .
      git commit -m "Merge upstream changes"
    • 使用 rebase 方法

      git rebase upstream/<主分支名称>

      冲突处理同上。

      解决每个冲突后执行:

      git rebase --continue
  5. 将本地分支的更改推送到 fork 的远程仓库

    git push origin <主分支名称> --force
警告
使用 rebase 方法同步更改可以保持提交历史的整洁,但会进行强制推送,请谨慎操作。