学习 Git 常用命令总结【1】

285 阅读7分钟

文章篇幅有限, 本文主要总结 1-3 个小点,其他留在其他文章中总结。

一、配置

1. Git配置的3个级别:

1️⃣ config -system: 修改/etc/gitconfig文件,是全局配置,只需要系统admin做一次即可。

2️⃣ config -global:修改 /home/[username]/.gitconfig 文件,配置只对每一个 SSH 的用户可见。

3️⃣ config -e:修改工作区的 .git/config 文件,配置只对当前仓库有效。

覆盖顺序(优先级):当前仓库>SSH用户>全局配置

2. Git配置操作

1️⃣ 修改提交者的信息(username 和 email)

git config --global user.name [username]
git config --global user.email [email]

2️⃣ 修改 Git 的 message 编辑器为 Vim

git config --global core.editor vim

3️⃣ 在 git 命令中开启颜色显示

git config --global color.ui true

4️⃣ 区分文件名大小写

编辑每一个Git项目下的 .git/config 文件,设置 core.ignorecase 为 false

git config --global core.ignorecase false

或者,

git mv oldFileName newFileName

5️⃣ 兼容不同平台的换行符号

  • Windows:

    git config --global core.autocrlf true

  • Mac:

    git config --global core.autocrlf input

  • 可以关闭关于换行符的提示:

    git config --global core.safecrlf false

6️⃣ 如果使用 HTTP clone 遇到提交大小限制,可以使用以下命令提高限制值

git config --global http.postBuffer 524288000(bytes)

或者使用下面命令进入编辑页面做相应的修改

git config -e -global

7️⃣ 配置 Git 常用命令的别名 alias

sudo git config --system alias.st status    #git st
sudo git config --system alias.ci commit    #git ci
sudo git config --system alias.co checkout    #git co
sudo git config --system alias.br branch    #git br

8️⃣ 进入工作根目录,运行 git config -e,会修改工作区的 .git/config 文件。

需要注意 Git config 文件的覆盖顺序是 312

9️⃣ 显示配置列表

git config --list

🔟 配置密钥

ssh-keygen -t rsa -C superhj1987@126.com    # 生成密钥,把公钥复制到 Git 服务器上

ssh -T git@github.com    # 测试是否成功

# 使用 ssh-agent 管理密码,避免后续需要身份验证的地方输入密码
ssh-add -K private_key_path # 添加私钥到 ssh-agent 中,使用 -K 参数将密钥加入密钥链中
ssh-add -l # 查看当前计算机中存储的密钥
ssh-add -d public_key_path # 将对应的私钥从 ssh_agent 中删除

二、获取项目的Git仓库

有两种获取 Git 项目仓库的方法。第一种是在现存的目录下,通过导入所有文件来创建新的 Git 仓库; 第二种是从已有的 Git 仓库克隆出一个行的镜像仓库来。

1、在工作目录中初始化新的仓库

使用 Git 管理现有的某个项目,在此项目所在的目录中,执行:

git init    # 在当前目录创建一个 Git 代码库
git init [projectName] # 新建一个目录并初始化为 Git 代码库

2、从现有的远程仓库克隆

git clone git://github.com/superhj1987/test.git

这样在会在本地当前目录下创建一个名为 “test” 的目录,其中包含一个 .git的目录,用于保存下载下来的所有版本记录,然后从中取出最新版本的文件副本。

三、将记录每次更新到仓库

1️⃣ 检查当前文件状态

git status

2️⃣ 追踪新文件,暂存已修改文件

git add. # 添加当前目录下的所有文件到暂存区域
git add --a # 添加所有文件和目录到暂存区域

3️⃣ 忽略未纳入版本管理的某些文件/文件夹

一般我们总会有一些文件不需要纳入Git的管理,也不希望他们出现在未追踪的文件列表。(比如一些自动生成的文件,日志、编译过程中创建的临时文件等)。 通过创建一个名为 .gitignore 的文件,在其中列出需要忽略的文件模式(Pattern)(注意window下直接创建该文件是非法命名,可以先创建一个txt文件,然后改名)

文件.gitignore的格式规范如下。

  • 所有的空行或者以注释符号 # 开头的行都会被 Git 忽略
  • 可以在使用标准的 glob 模式匹配。匹配模式最后的反斜杠(/)说明要忽略的是**目录**;
  • 要忽略指定模式以外的文件或目录,可以在模式前加感叹号(!)取反
  • 所谓的 glob 模式是指 Shell 所使用的简化了的**正则表达式**。
    • 星号(*)匹配零个或多个任意字符
    • [abc] 匹配任何一个在方括号中的字符(这个例子要么匹配一个a,要么匹配一个b,要么匹配一个c)
    • 问号(?)匹配一个任意字符
    • 如果在方括号中使用短划线(-)或波浪线(~)分割两个字符,则表示在这两个字符范围内的字符都可以匹配。(比如,[0-9]表示匹配0~9的所有数字)

此外,忽略未纳入版本管理的文件或文件夹的方式还有:

  • 可以为自己配置一个全局的 ignore 文件,位于任何版本库之外:

    git config -global core.excludesfile ~/.gitignoreglobal

  • 在 `.git/info/exclude` 文件中设置你自己本地需要排除的文件,不会影响到其他人,也不会提交到版本库中。

4️⃣ 忽略已经在版本库里的 文件/文件夹

  • 告诉 Git 忽略对已经纳入版本管理的文件 a 的修改,Git会一直忽略此文件直到重新告诉Git可以再次追踪到此文件。

    git update-index --assume-unchanged a

  • 告诉 Git 恢复追踪 a

    git update-index --no-assume-unchanged a

  • 查看当前被忽略的已经被纳入版本管理的文件

    git ls-files -v | grep -e "^[hsmrck]"

5️⃣ 查看已暂存和未暂存的更新、提交之间的差异

git status 的显示比较简单,仅仅列出了修改过哪些文件,如果想要查看具体修改了什么地方,可以使用 git diff 命令

git diff #查看尚未暂存的文件更新了哪些部分
git diff --cached [file] #查看已经暂存起来的文件和上次提交时的快照之间的差异
git diff [branch1] [branch2] #显示两次提交之间的差异

6️⃣ 提交更新

每次准备提交之前,先使用 git status 查看是否都已经暂存了,然后再执行提交命令 git commit 提交更新。

git commit [file1] [file2] #会提示输入本次提交说明
git commit -m [message] #直接附带提交说明
git commit --amend # 修改最后一次提交
git commit -v #提交时显示所有diff信息
git commit --amend -m [message] #使用新 commit 替代上一次提交,如果代码没有任何变化,则用来修改上一次 commit 的提交信息
git commit --amend [file1] [file2] ... #重做上一次 commit,包括指定文件的新变化

7️⃣ 跳过使用暂存区域

git commit -a # 跳过使用 git add 步骤,直接 commit

8️⃣ 移除文件

第一种情况:

想要从Git中移除某个文件(包括暂存区域和工作目录),就必须要从已经追踪的文件清单中移除(即,从暂存区中移除),然后提交。

可以使用 git rm 来完成此项工作,并连带从工作目录中删除指定的文件,这样文件以后就不会出现在未追踪文件清单中

git rm [file1] [file2]

如果删除以前修改过并且已经放到暂存区域,则必须要使用强制删除选项 -f,以防误删除文件之后丢失修改的内容

第二种情况:

想要把文件从 Git 仓库中删除(即从暂存区移除),但仍然希望保留在当前工作目录中。换句话说,仅仅从追踪清单中删除。比如一些编译文件不小心纳入仓库后,要移除追踪但是不删除文件,一遍稍后在 .gitignore 文件中补上,使用 -cached选项 即可:

git rm -cached [file] #后面可以列出文件或目录名称,
# 也可以使用 glob 模式
git rm log/*.log

9️⃣ 移动文件

要在 Git 中对文件改名,可以使用 git mv 命令

git mv file_from file_to

【解析】 运行 git mv 命令相当于执行了下面 3 条命令

mv README.txt README
git rm README.txt
git add README

🔟 回滚文件

git branch backup #先备份到一个新分支
git log #通过日志找到要回滚的版本号
git reset --hard [版本号] # 回滚操作

本文使用 mdnice 排版