Git 常用命令总结
介绍一些 Git 常用命令。
1 设置用户名和邮箱
git config --global user.name "your name"
git config --global user.email "your email"--global 表示全局设置,如果只想对当前仓库生效,去掉 --global 即可。
user.name 或 user.email 之后,否则会把 --global 当作用户名或邮箱。GitHub 等代码托管平台会为用户提供一个匿名邮箱地址。就 GitHub 来说,在 Settings -> Emails 中勾选 Keep my email addresses private,然后就可以看到 GitHub 分配的类似于 123456+user@users.noreply.github.com 的匿名邮箱地址。匿名邮箱地址可以保护个人隐私,同时也能将提交与平台账户关联起来,方便在平台上查看提交历史和贡献记录。
如果不需要关联账户,或代码托管于多个平台,可以使用一个虚假的邮箱地址。
2 初始化本地仓库和远程仓库
初始化本地仓库
git init创建远程空仓库 (如果没有)
登录 GitHub,点击右上角
+,选择New repository,填写信息,点击Create repository。输入仓库名,其余保持默认即可,点击Create repository。关联本地仓库和远程仓库
git remote add origin <远程仓库地址>暂存并创建 commit
git add . git commit -m "message"将本地仓库内容推送到远程仓库
git push --set-upstream origin master
3 撤销已 commit 的更改
保留更改到暂存区
git reset --soft HEAD~1删除更改
git reset --hard HEAD~1
4 修改某个 commit 的 message
假设修改第 n 个 (以最近的 commit 为 1) commit 的 message:
git rebase -i HEAD~n在弹出的编辑器中,将需要修改的 commit 前的 pick 改为 reword,保存并关闭编辑器。接着会弹出一个新的编辑器,修改 message 后保存并关闭编辑器。
5 合并多个 commit
假设合并最近的 n 个 commit:
方法一:
git rebase -i HEAD~n在弹出的编辑器中,将需要合并的 commit 前的 pick 改为 squash,保存并关闭编辑器。接着会弹出一个新的编辑器,修改 message 后保存并关闭编辑器。
方法二:
git reset --soft HEAD~n
git commit -m "new message"6 强制推送
git push --force多人协作时不建议使用,必要时可以使用 git push --force-with-lease。它会检查远程仓库是否有新的更改,如果有则拒绝推送。
7 批量修改提交者信息
新建一个.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 代表该文件的路径,可以手动指定。
8 将原仓库的更改同步到 fork 的仓库
添加上游远程仓库
git remote add upstream <原仓库地址>获取上游远程仓库的更改
git fetch upstream切换到本地的主分支
git checkout <主分支名称>将上游远程仓库的更改应用到本地分支
使用 merge 方法
git merge upstream/<主分支名称>如果有冲突,你会看到类似如下的信息:
CONFLICT (content): Merge conflict in <冲突文件路径>打开冲突的文件,你会看到类似如下的标记:
<<<<<<< HEAD 你的代码 ======= 上游的代码 >>>>>>> upstream/main你需要手动编辑冲突的文件,并删除所有标记 (
<<<<<<<,=======,>>>>>>>),然后保存文件。解决所有冲突后执行:
git add . git commit -m "Merge upstream changes"使用 rebase 方法
git rebase upstream/<主分支名称>冲突处理同上。
解决冲突后执行:
git add <冲突文件路径> git rebase --continue
将本地分支的更改推送到 fork 的远程仓库
git push origin <主分支名称> --force