Git命令参考

参考

Git官网的介绍 强烈推荐

Git要点简述


  • Git 更像是一个小型的文件系统(意味着支持很多对文件的操作,比如文件对比diff,文件移动mv)
    • 保存每次提交时文件快照,而非差异(这意味着,不用大量的运算,就可以快速地找到每个副本)
    • 本地数据库拥有完成的提交记录,一般不受网络问题影响(集中式版本控制工具,没有本地仓库,不便捷,也不安全)
    • Git 数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名(更快捷,也避免了文件重名的麻烦)
  • Git中文件状态和术语(有多种表述,可以综合参考下面的泳道图和示意图)

在这里插入图片描述
表示文件状态的术语有:untracked, unmodified, modified, staged, commited
untracked:文件未被追踪即没有加入Git;
unmodified:新的文件或者提交更新后未被修改的文件;
modified:已经修改但是未保存(或者说是缓存)的文件
staged:修改已经保存但是未提交的文件。
commited: 已经提交更新的文件(但一般不标记这个,而是unmodified,体现提交过程的周期重复性)

获取帮助


# 获取快捷参考
$ git add -h
usage: git add [<options>] [--] <pathspec>...

    -n, --dry-run         dry run
    -v, --verbose         be verbose
    ...
# 获取详细信息
## <vert>替换为git命令的核心动词,比如add.
$ git help <verb>
$ git <verb> --help
## 不适用于windonws 命令行
$ man git-<verb>

## 例:
F:\WORKSPACE\VSCode-Portable\[Coding]\C\Algorithm_C_CODING>git help add
## 这将在你的默认浏览器上打开Git安装目录里的html文件。

在这里插入图片描述

查看信息


# 查看git版本信息
$ git --version
git version 2.33.0.windows.2
# 查看用户名
$ git config user.name
Poorjack
# 查看邮箱设置
$ git config user.email
luozhansang@outlook.com
## 如果要从github上clone仓库,不用户名和邮箱与github上的一致,只需要在github上的SSH设置和自己的公钥

# 查看详细的信息
$ git config --list
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslbackend=openssl
http.sslcainfo=D:/Git/mingw64/ssl/certs/ca-bundle.crt
core.autocrlf=true
core.fscache=true
core.symlinks=false
pull.rebase=false
credential.helper=manager-core
credential.https://dev.azure.com.usehttppath=true
init.defaultbranch=master
user.email=xxxx
user.name=xxxx

查看/指定Git默认的编辑器


$ git config --global core.editor
"C:\Users\LUOZH\AppData\Local\Programs\Microsoft VS Code\Code.exe" --wait

可以让code在CMD里表示vscode,但需要先设置环境变量

初始化新仓库添加新文件


创建文件夹A,点击进入,在此处打开cmd或者gitBash(在cmd中运行git命令需要配置git变量环境)

cd /d 路径 # 在cmd中输入命令进入到新创建文件夹
git init

初始化后,在当前目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。

git add <file_name1> [<file_name2> ...]
# 可以一次添加多个文件
# 例:(一般在本地创建仓库后,都推荐以下命令进行初始化)
$ git add *.c
$ git add LICENSE
$ git commit -m 'initial project version'

从现有仓库克隆


git clone url [你希望的新的项目名]
  • url可以是https或者ssh的,以github为例:在这里插入图片描述
  • [ ]表示其中的内容是选填的的,注意[ ]本身是不需要的.
    在软件工程一般的语法格式中[]里内容是选填的,< >里的内容是必填的。

可能需要创建ssh令牌并在对应托管平台配置。
例如,从github上clone仓库,就要在github的ssh设置中填上自己的公钥。

git仓库和文件状态


Git是分布式的版本管理工具,在云端(就是github等托管平台)有一个仓库,在用户本地有一个仓库(如果是多人协作,就是每人本地都一个仓库)。本地分为工作区和存储区(暂存区/版本库)。一份文件有4中状态:

untracked unmodified modified staged git add <file> git restore <file> edit File_Name git restore <file> git add File_Name git restore --staged <file> git commit 创建新文件后未加入Git项目 VSCgit项目中创建文件默认加入 标识staged的文件已经被加入入暂存区 untracked unmodified modified staged File status leifecycle
  • untrackde文件意味着文件不在git项目中或者为忽略了(这需要在项目的.gitignore文件中配置)

  • 标记unmodifiedmodified的文件都在本地工作区(就是在文件管理器可以看见),staged文件已经进入了暂存区(英文就是stage)。对本地仓库commit后,就会加入本地仓库。此时文件又回到unmodified的状态。综上加入git的文件在unmodified,modified,staged三中状态中变化(git restore <file>可以将文件从git中忽略?)。

在这里插入图片描述

master即表示本地仓库的主分支
index是暂存区

检查文件状态


# 获取详细信息
git status
# 获取简短信息
git status -s

例如:

F:\WORKSPACE\VSCode-Portable\[Coding]\C\Algorithm_C_CODING>git status
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   README.md
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   hello.c 

no changes added to commit (use "git add" and/or "git commit -a")

on branch master 提示当前分支是主分支
changed not staged意味工作区有文件被更改,但未放入暂存区。
可以使用git add / git commit -a 文件名命令将文件的从modified变为staged
changes to be commit意味着文件放入暂存区,但未放入本地仓库(版本库)。
在vscode体现如下:
在这里插入图片描述

git add README.md

变为:
在这里插入图片描述

在VScode中工作区中发生了更改的文件放在Changes一栏下,加入暂存区的文件放在Staged Changes一栏下。


git add <file> 命令有多种用途,包括添加文件加入Git项目,也包括将文件加入本地仓库。

比较文件差异


git diff

此命令比较的是工作目录中当前文件和暂存区域快照之间的差异。也就是当前文件和上一个modifide文件件的差异。
若文件全部保存到本地仓库,则该命令不会有任何输出。

q退出(也适用于其他Git命令)

git diff --cached
# 查看工作区和上次快照的差异
git diff --staged
# 查看暂存区和上次快照的差异

看已经暂存起来的文件和上次提交时的快照之间的差异

删除文件


一个常见的情景是:某个文件已经被加入到stage,但是它并不被需要。(cached和staged同义,缓存区就是暂存区)

git rm --cached <file_name>

删除多个文件时,可是使用通配符(以反斜杠转移)

# 通配符一般有三钟类型:
## 1.匹配任意一个字符
## 2.匹配任意0~∞个字符,
## 3.匹配给字符
git rm \*~

提交更新


提交更新前,最好确保所有文件都已经暂存(放入本地仓库)

git commit -m '你的对本次提交的注释'

# 例:
F:\WORKSPACE\VSCode-Portable\[Coding]\C\Algorithm_C_CODING>git commit -m '在命令行里加注释'
[master 7506fa3] '在命令行里加注释'
 1 file changed, 8 insertions(+), 1 deletion(-)

在VSCode中如果直接敲git commit的话可能出现一些意味的情况,因为Git好像是默认为每次提交添加注释的。在VSC中有commit的GUI图标,也是一定要写注释的。如下:

在这里插入图片描述
点击✓提交到版本库(本地仓库)

git commit -a
# 跳过git add命令,直接将工作区更改添加到暂存区,再添加的版本库。

.gitignore文件语法

.gitignore文件(以下简称.git)告诉git那些文件不必提交。
一般地,在.git上的文件就不必提交。
但为了避免写上每个文件的文件名,我们需要一些通配法则。
例如:*.exe表示所有文件名以.exe结尾的文件。

# 这是一个.gitignore文件
## 所有exe文件不提交
*.exe
## 所有数字开头的文件不提交
[0-9].txt
  • 每行仅写*.exe或者注释,不要将注释写在其后
  • 不要将*.exe[0-9].txt写在同一行

字符统配规则

字符功能备注
*匹配0~∞多各任意字符
[ ]匹配任何一个列在方括号中的字符[0-9]是一种简写,表示匹配所有 0到9之间任意某个的数字
匹配一个任意字符

补除规则

字符功能备注
不忽略该(类)文件,即是它在包含着其他的忽略规则着!lib.a表示跟踪所有的 lib.a,即便前面忽略了 .a 文件

!放在文件名前:
doc/!readme.txt
而不是!doc/readme.txt

文件夹递归规则

字符功能备注
/<dic_name>仅忽略当前目录下的该文件夹忽略文件夹就会忽略文件夹内所有内容
<dic_name>/忽略任何目录下的该文件夹任何目录也是在当前目录即工作目录的范围内的

文件递归规则

字符功能备注
doc/*.txt忽略doc目录下的txt文件,但不忽略其子目录下的txt文件非递归忽略
doc/**/*.pdf忽略doc目录及其子目录下的pdf文件递归忽略

后两种规则可以视为统配法则的拓展:
使用*?[ ]可以让我们用少量的字符表示许多文件名有某一规律的文件。实际上,绝对文件名包含文件路径,例如,C:\Users\LUOZH\Desktop\readme.txt,文件夹和文件的递归规则就相当于路径上的‘通配法则’。

注意:git是起源于linux的,在linux上用如\n的转义字符表示换行,就用正斜杠(就是除号的另一种写法),/作为路径间的分隔符,这是不同于windows的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值