git终端基础命令学习
[TOC]
基础命令
1. 创建仓库
1.1 克隆现有仓库(git clone)
命令格式: git clone [url]
自定义本地仓库名称: git clone [url] [file_name]
1.2 在现有文件夹创建仓库(git init)
cd进入对应文件夹。- 终端输入
git init创建仓库。该命令会创建一个.git文件夹,里面包含git仓库所必需的文件,但这个时候项目中的文件还没有被跟踪。 - 通过
git add [file_name] / git add .对文件添加跟踪。 - 最后执行
git commit -m 'desc'提交。
2. 更新提交到仓库
2.1 检查当前文件状态 (git status)
命令格式:git status,运行结果如下图
从图中可以看出,命令执行后,你可以看到当前所在分支,这里为master,未跟踪的文件Untracked files:,如果不存在为跟踪的文件,则不会出现该内容。
2.2 跟踪新文件 (git add [file_name] / git add .)
命令格式:git add [file_name]对某个文件添加跟踪,或者git add . / git add *,对新增加的所有文件进行跟踪。
然后执行git status
在Changes to be committed下面显示的内容,就说明已经是暂存状态了。如果此时提交,那么该内容此时此刻的版本将被留存在历史记录中。
2.3 暂存已修改文件 (git add [file_name] / git add .)
- 修改一个已被跟踪的文件,执行
git status
Changes not staged for commit下显示的就是修改了的已被跟踪的文件,但还没有放到暂存区。
- 继续执行
git add命令,就可以讲修改内容添加到暂存区了。
git add是一个多功能命令:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等
2.4 贮藏修改(git stash)
当你修改完代码,想提交时,突然发现你开发分支错了,你需要将修改内容移动到另外一个分支。可运行git stash命令,贮藏当前修改代码。然后切换到对应分支,在执行git stash pop将贮藏内容最新的一条放置到当前分支。
其他相关命令
git stash list:查看当前贮藏的所有内容git stash save '注释':功能同git stash,区别是可以加注释,方便区分和查找git stash pop [index]:指定使用第[index]条贮藏内容git stash apply:作用同git stash pop,不同与该条命令不会删除所使用的贮藏内容,也就是可以在不同分支多次使用该贮藏内容git stash drop [index]:移除指定的第[index]条贮藏内容git stash clear:移除所有的贮藏内容git stash show:查看堆栈中最新保存的stash和当前⽬录的差异,显⽰做了哪些改动,默认show第一个存储
2.5 状态简览 (git status -s / git status --short)
使用git status查看状态时,输出十分详细,如果项目较大,修改内容较多,看起来将比较费劲。可使用git status -s / git status --short命令,将得到一种更加紧凑的输出格式。
??:新添加到未被跟踪的文件A:新添加到暂存区的文件- 左
M:表示该文件被修改了,且已放入暂存区 - 右
M:表示该文件被修改了但是还未放入暂存区
2.6 忽略文件 (.gitignore)
.gitignore文件,该文件中符合条件的文件将不被跟踪。
文件 .gitignore 的格式规范如下:
- 所有空行或者以
#开头的行都会被 Git 忽略。 - 可以使用标准的
glob模式匹配(即shell所使用的简化了的正则表达式)。 - 匹配模式可以以
/开头防止递归。 - 匹配模式可以以
/结尾指定目录。要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号!取反。
使用两个星号* 表示匹配任意中间目录,比如a/**/z可以匹配a/z, a/b/z或a/b/c/z等。
eg:
*.[oa]:匹配以.o或.a结尾的文件。*~:匹配以~结尾的文件,比如文件副本。
2.7 查看已暂存和未暂存的修改(git diff)
git diff命令,将显示你修改了的内容。而git status只会告诉你哪些文件有修改。
请注意,
git diff本身只显示尚未暂存的改动,而不是自上次提交以来所做的所有改动。所以执行了git add命令的改动,无法使用git diff查看
- 使用
git diff --cached / git diff --staged命令来查看已经暂存起来的变化。
如果你喜欢通过图形化的方式或其它格式输出方式的话,可以使用
git difftool命令来用Araxis,emerge或vimdiff等软件输出diff分析结果。 使用git difftool --tool-help命令来看你的系统支持哪些git diff插件。
2.8 提交更新(git commit)
- 使用
git commit命令提交:当确认了所以更改已提交至暂存区域,即可执行git commit提交,这种提交方式会启动文本编辑器,输入本次提交说明,保存即可完成提交。文本编辑器中默认会显示最后一次运行git status显示的内容,如果想看更加详细的修改的内容,可使用git commit -v。 - 使用
git commit -m 'desc'命令提交:用-m的方式提交,可直接将本次提交说明写在命令后面。提交后它会告诉你,当前是哪个分支。本次提交的完整SHA-1校验和,以及在本次提交中,有多少文件修订过,多少行添加和删改过。
2.9 跳过使用暂存区域(git commit -a -m 'desc')
如果确认修改的内容没有什么问题,可直接通过给git commit加上-a选项,跳过执行git add的步骤。即直接执行git commit -a -m 'desc'。
2.10 移除文件(git rm [file_name])
- 可通过
git rm [file_name]从git中移除某个文件,并从已跟踪文件清单移除,然后提交。 - 如果只是从工作目录中手工删除文件,运行
git status时就会出现在Changes not staged for commit部分,说明并没有从已跟踪文件中清除,需要执行git add将其从已跟踪文件中清除,然后提交。 - 如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项
-f(注:即force的首字母)。这是一种安全特性,用于防止误删还没有添加到快照的数据,这样的数据不能被git恢复。 - 如果想讲一个文件从
git中删除,但是本地保留,可使用--cached选项,即git rm --cached [file_name]。(当某类文件忘记添加.gitignore时,可通过该方法将文件从git中删除) git rm命令后面的文件名可通过glob(简单正则表达式)指定。
eg:
git rm log/\*.log:此命令删除log/目录下扩展名为.log的所有文件。git rm \*~:此命令删除以~结尾的所有文件。 注意到星号*之前的反斜杠\,因为git有它自己的文件模式扩展匹配方式,所以我们不用shell来帮忙展开。
2.11 移动文件(git mv [file_name] [new_file_name])
git中并不显式跟踪文件移动操作。使用git mv [file_name] [new_file_name]命令可以实现git中文件的移动和重命名。git mv [file_name] [new_file_name]相当于:
- mv [file_name] [new_file_name]
- git rm [file_name]
- git add [new_file_name]
3. 查看提交历史(git log)
当你想查看项目的git提交历史时,可使用git log命令。默认不用任何参数,git log会按提交时间列出所有的更新,最近的更新排在最上面。 正如你所看到的,这个命令会列出每个提交的SHA-1校验和、作者的名字(执行 git add 的人)和电子邮件地址、提交时间以及提交说明。git log有许多选项可以帮助你搜寻你所要找的提交, 接下来我们介绍些最常用的。
-p:用来显示每次提交的内容差异,并显示每次git commit的变化,也可以加上-2来仅显示最近两次的提交。--stat:可以查看每次提交的简略的统计信息。--pretty:可以指定使用不同于默认格式的方式展示提交历史。这个选项有一些内建的子选项供你使用。
oneline: 将每个提交放在一行显示,查看的提交数很大时非常有用。完整命令格式为git log --pretty=onelineshort: 相比git log不显示提价时间。完整命令格式为git log --pretty=shortfull:相比git log多了一个提交人(最后执行 git commit 的人)的名字和邮箱,少了提交时间。完整命令格式为git log --pretty=fullfuller:相比git log多了提交人人的名字、邮箱和时间。完整命令格式为git log --pretty=fullerformat:可自定义显示格式。完整命令格式为git log --pretty=format:"[自定义格式]"。git log --pretty=format的常用格式
| 选项 | 说明 |
|---|---|
| %H | 提交的完整哈希值 |
| %h | 提交的简写哈希值 |
| %T | 树的完整哈希值 |
| %t | 树的简写哈希值 |
| %P | 父提交的完整哈希值 |
| %p | 父提交的简写哈希值 |
| %an | 作者名字 |
| %ae | 作者的电子邮件地址 |
| %ad | 作者修订日期(可以用 --date=选项 来定制格式) |
| %ar | 作者修订日期,按多久以前的方式显示 |
| %cn | 提交者的名字 |
| %ce | 提交者的电子邮件地址 |
| %cd | 提交日期 |
| %cr | 提交日期(距今多长时间) |
| %s | 提交说明 |
--graph:展示你的分支和合并历史。 一般和git log --pretty=oneline和git log --pretty=format结合使用。git log --pretty=oneline --graph
4. 撤销命令(git restore <选项>? [file_name])
执行git status命令后,终端显示内容:
在Changes to be committed:和Changes not staged for commit:下都可以看到提示git restore --staged [file_name]和git restore [file_name],分别用来取消暂存和重置修改。
git reset HEAD [file_name]同git restore --staged [file_name], git reset -- [file_name]同git restore [file_name]
5. 远程仓库的使用(git remote)(没理解😵💫)
5.1 查看远程仓库(git remote)
如果想查看你已经配置的远程仓库服务器,可以运行git remote命令。你可以看到origin,这是git给你克隆的仓库服务器的默认名字。
执行git remote -v,可以查看你远程仓库的url。如果远程仓库不止一个,该命令会将它们全部列出。
5.2 添加远程仓库 (git remote add [name] [url])
执行git remote add [name] [url]可以添加远程仓库。
5.3 从远程仓库中抓取与拉取(git fetch [remote-name])
-
git fetch origin会抓取克隆(或上一次抓取)后新推送的所有工作。 必须注意git fetch命令会将数据拉取到本地仓库 - 它并不会自动合并或修改当前的工作。 当准备好时必须手动将其合并入你的工作区。 -
可使用
git pull来自动抓取并合并到当前分支。
5.4 推送到远程仓库(git push [remote-name] [branch-name])
使用git push origin master将master分支推送到origin服务器。当你和其他人克隆了想通的内容,他们先推送修改内容到服务器,你直接推送的话将被拒绝,你必须先将他们的修改拉取下来并将其合并进你的工作后才能推送。
5.5 查看某个远程仓库的信息(git remote show [remote-name])
- 它会列出远程仓库的
url和跟踪分支的信息。这些信息非常有用,它告诉你正处于master分支,并且如果运行git pull,就会抓取所有的远程引用,然后将远程master分支合并到本地master分支。 它也会列出拉取到的所有远程引用。 - 这个命令列出了当你在特定的分支上执行 git push 会自动地推送到哪一个远程分支。 它也同样地列出了哪些远程分支不在你的本地,哪些远程分支已经从服务器上移除了,还有当你执行 git pull 时哪些分支会自动合并。
6.6 远程仓库的移除与重命名(git remote rm [remote-name] & git remote rename [old_remote_name] [new_remote_name])
- 移除远程仓库:
git remote rm [remote-name] - 重命名远程仓库:
git remote rename [old_remote_name] [new_remote_name]






