Git常用命令

如果您不能很好的应用 Git,那么这里为您提供一个非常棒的 Git 在线练习工具 Git Online,您可以更直观的看到您所使用的命令会产生什么效果。

安装

[mac] 通过 Homebrew 安装(推荐)

安装前检查:

检查本地是否自带 git。如果有,查看 git 安装路径,分析安装方式,选择性更新 git

1
git -v

检查本地 homebrew 是否自带。如果有,则更新下

1
brew -v

开始安装:

1
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

安装完成后,根据提示将 Homebrew 添加到环境变量中(M 系列芯片需手动添加)

安装 git

1
brew install git

检查是否安装成功:

1
which git

更新 Homebrew 软件索引:

1
brew update

升级 Git:

1
brew upgrade git

其他安装方式,详见

Tips:

  • 系统自带的 Git 路径为 /usr/bin/git,Homebrew 安装的路径为:

    • Apple Silicon(M1/M2):/opt/homebrew/bin/git
    • Intel: /usr/local/bin/git
  • 如果你执行 which git 仍显示为 /usr/bin/git,说明未生效。请重新打开终端,或手动设置 PATH:

    1
    2
    echo 'export PATH="/opt/homebrew/bin:$PATH"' >> ~/.zshrc
    source ~/.zshrc

配置账号

1
2
git config --global user.name hua
git config --global user.email [your email]

生成的配置信息在用户根目录/.gitconfig

Tips::

Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。这些变量存储再三个不同的位置:

  1. /etc/gitconfig 文件:包含系统上每一个用户及他们仓库的通用配置。如果在执行 git config 时带上 –system 选项,那么它就会读写该文件中的配置变量。(由于它是系统配置文件,因此您需要管理员吧或超级用户权限来修改它。)
  2. ~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。您可以传递 –global 选项让 Git 读写此文件,这会对您的系统上所有的仓库生效。
  3. 当前使用仓库的 Git 目录中的 config 文件(即 .git/config):针对该仓库。您可以传递 –local 选项让 Git 强制读写此文件,虽然默认情况下的就是它。(当然,您需要进入某个 Git 仓库中才能让该选项生效。)

每一个级别会覆盖上一个级别的配置,所以,**.git/config** 的配置变量会覆盖 /etc/gitconfig 中的配置变量。

日常技能

1
2
3
4
5
6
7
8
# 查看分支合并图
git log --oneline --graph --decorate --all
# 删除暂存区
git rm -r -f --cached .
# 设置当前分支默认推送的远程分支
git push -u origin [match branch]
# 修改最近一次提交的备注信息
git commit --amend -m "update remark"

查看提交记录

查看提交日志,会发现如下内容:

image-20230927165319670

commit 后面的那一串字符:sha1 计算的结果。

sha1、md5:加密算法、随机数,用于区分是哪一次提交。

自定义查看提交记录日志:

1
2
3
git log -2 // 2:指最近的2次提交
git log --pretty=online
git log --pretty=format:"%h -%an, %ar : %s"

Q & A

[mac] brew update 更新太慢

使用 USTC 国内镜像(推荐)

修改终端配置文件

1
vim ~/.zshrc

粘贴以下内容到文件末尾

1
2
3
4
5
6
# Homebrew 国内镜像加速(USTC)
export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.ustc.edu.cn/brew.git"
export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.ustc.edu.cn/homebrew-core.git"
export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles"
export HOMEBREW_API_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles/api"
export HOMEBREW_NO_ENV_HINTS=1

保存并生效配置

1
source ~/.zshrc

[win] git status, git commit 等中文信息乱码问题

1
2
3
4
git config --global gui.encoding utf-8
git config --global i18n.commitencoding utf-8
git config --global core.quotepath false
git config --global svn.pathnameecoding utf-8

删除用户配置信息

  1. 找到 .gitconfig 文件直接删掉(最直接)

  2. 或通过命令删除

    1
    2
    git config --global(或 --system 或 --local) --unset user.name
    git config --global(或 --system 或 --local) --unset user.email

第一次发布项目(本地 -> 远程)

1
2
3
4
5
git init
git add . // 文件 -> 暂存区, "." 表示当前目录下的所有文件提交暂存区
git commit -m "第一次提交" // 暂存区 -> 本地分支(默认为master)
git remote add origin <远程项目所在的ssh地址(或http协议地址)>
git push -u origin master // 本地分支 -> 远程项目

本地 git 与远程 github 保持登录联通

git 的远程仓库托管网站,推荐 github

为了在本地和远程仓库之间进行操作, 可采取免密钥登录,配置 .ssh 先在本地配置, 然后把公钥发送给远程仓库 github

在本地 git 命令行中输入:

1
ssh-keygen -t rsa -C [email]

然后一直回车, 出现下图则表示成功

image-20230927165232917

发送给 github

  1. github -> settings -> SSH and … -> New SSH -> title & key

    image-20230927165251266

  2. 复制本地公钥(xx.pub)到 key 中,删掉最后的回车占位符

  3. 如果本地和远程成功通信,则在本地./ssh 目录中自动生成known-hosts文件

  4. 测试本地仓库与远程仓库的登录连通性

    1
    ssh -T git@github.com

本地创建 git 项目与远程项目进行关联

本地创建 git 项目与远程项目进行关联时,要保持本地电脑 PC 端 github 账号登录状态。(一般是本地电脑,这个跟 ssh 配置有关。ssh 配置指向其他地址,则其他地址上的 github 账号保持登录状态即可)参考本地 git 与远程 github 保持登录联通

  1. 先创建一个目录 demo

  2. 进入该目录,鼠标右键点击 git bash…, 打开 git 命令端, 输入 git init, 会自动在 demo 目录下生成 .git目录(该目录是隐藏的).

  3. github 上创建一个 Repository.

    image-20230927165301540

ssh: connect to host github.com port 22: Connection timed out

查看是否存在 id_rsa id_rsa.pun known_hosts 三个文件,如果没有则参考 ssh 本地关联远程 github

1
2
cd ~/.ssh
ls

继续使用 SSH,但换端口(443):

编辑 SSH 配置:

1
vim ~/.ssh/config

添加已下内容:

1
2
3
4
5
6
Host github.com
Hostname ssh.github.com
User git
Port 443
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa

测试连接:

1
ssh -T git@github.com

如果看到 Hi username! You've successfully authenticated... 就说明成功了

.gitignore 配置

使用场景:如 .gitignore 文件编写需要排除的文件。以下是常见的通配符:

  1. *:匹配任意字符。
  2. *.xxx:匹配后缀 .xxx的文件中。
  3. !xx.xxx:在后缀 .xxx 的文件中,排除 xx.xxx 文件,结合 *.xxx 使用。
  4. dir(目录)/:忽略 dir 中的所有文件。
  5. dir(目录)/*/*.xxx:能够忽略如 dir/t1/a.xxx, dir/t2/b.xxx,但不能忽略含 2 级以上的目录中的 *.xxx(如:dir/a/b/j.xxx)文件,这跟通配符 * 有关。
  6. dir/**/*.xxx:忽略任意级别目录中的 *.xxx文件。
  7. git 项目中创建的空目录,默认自动忽略,git status 查不到此目录信息。