当我们需要在不同的仓库中工作,并且需要推送到不同的远程仓库,就需要配置git config来个性化设置每个仓库

git的配置信息存储在三个不同的地方:

你可以通过以下命令查看所有的配置以及它们所在的文件:

1
git config --list --show-origin

/etc/gitconfig文件是系统所有用户以及仓库的通用配置,读写该文件中的配置变量需要以管理员权限执行git config --system [<options>]

/.gitconfig文件只针对当前用户,读写该文件中的配置变量需要执行 git config --global [<options>] ,这会对你系统上 所有 的仓库生效

在当前使用仓库的的目录中也有一个config文件.git/config,默认情况下当前仓库使用此配置文件中的变量,你可以在当前仓库目录中传递 --local 选项让 Git 强制读写此文件

以上三个配置文件的优先级越来越高,.git/config中的配置变量在当前仓库中的优先级最高

下面两行用来设置git的用户名和邮件地址,此后你的每一次git提交都会使用这些信息,每一次推送到远程仓库也会显示这些信息,不可更改。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 --global 选项的命令来配置。

1
2
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com

如果想要检查你的配置,可以使用 git config --list 命令来列出所有 Git 当时能找到的配置。--system--global选项只显示对应的配置信息。

1
2
3
git config --list
git config --system --list
git config --global --list

你可以通过输入 git config <key> 来检查 Git 的某一项配置

1
git config user.name

查询 Git 中该变量的 原始 值,它会告诉你哪一个配置文件最后设置了该值:

1
git config --show-origin user.name

当你用别人的电脑或者别人在你的电脑上配置过git远程仓库的账号从远程仓库克隆项目的时候可能会遇到没有权限的问题:

1
2
remote: User permission denied
fatal: unable to access : The requested URL returned error: 403

首先确保具有克隆权限,如果有克隆权限,在控制面版中找到控制面板\用户帐户\凭据管理器Windows凭据,删除其他人的凭据即可。

--amend表示这一次的提交会替代上一次的提交,最终在git log中只会显示这一次的提交

1
git commit --amend

GitHub使用总结

最近(2021年1月25日)从GitHub克隆项目的时候,提示:

1
Basic authentication using a password to Git is deprecated and will soon no longer work. Visit https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information around suggested workarounds and removal dates.

根据提示链接配置令牌即可

使用ssh协议克隆版本库:

1
2
git clone ssh://[user@]server/project.git
git clone [user@]server:project.git

在GitHub上使用ssh密钥进行身份验证

1
2
3
4
5
6
ssh-keygen -t ed25519 -C "your_email@example.com"
# 或者
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 或者
ssh-keygen -m PEM -t rsa -b 4096 -C "your.email@example.com"
ssh -T git@github.com

使用 SSH 连接到 GitHub

将远程 URL 从 HTTPS 切换到 SSH

遇到冲突时的分支合并

在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,在合并它们的时候就会产生合并冲突

首先,在做一次可能有冲突的合并前尽可能保证工作目录是干净的。 如果你有正在做的工作,要么提交到一个临时分支要么储藏它。

你可能不想处理冲突这种情况,完全可以通过 git merge --abort 来简单地退出合并。git merge --abort 选项会尝试恢复到你运行合并前的状态。

如果出于某些原因你想要重来一次,也可以运行 git reset --hard HEAD 回到上一次提交的状态。 请牢记此时任何未提交的工作都会丢失,所以请确认你不需要保留任何改动。

1
2
3
4
git pull --rebase origin master
# 本地推送强制覆盖远程分支
git push --force origin master
git push --force -u origin master

查看每次提交所在的位置 git log --pretty=oneline

1
2
3
git log --graph --oneline --decorate --all
git log --pretty=format:"%h - %an, %ar : %s"
git log --pretty=format:"%h %s" --graph