Git终端基础命令

107 阅读11分钟

git终端基础命令学习

[TOC]

基础命令

1. 创建仓库

1.1 克隆现有仓库(git clone

命令格式: git clone [url] 自定义本地仓库名称: git clone [url] [file_name]

1.2 在现有文件夹创建仓库(git init

  1. cd进入对应文件夹。
  2. 终端输入git init创建仓库。该命令会创建一个.git文件夹,里面包含git仓库所必需的文件,但这个时候项目中的文件还没有被跟踪。
  3. 通过git add [file_name] / git add .对文件添加跟踪。
  4. 最后执行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/za/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命令来用Araxisemergevimdiff等软件输出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]相当于:
  1. mv [file_name] [new_file_name]
  2. git rm [file_name]
  3. git add [new_file_name]

3. 查看提交历史(git log

当你想查看项目的git提交历史时,可使用git log命令。默认不用任何参数,git log会按提交时间列出所有的更新,最近的更新排在最上面。 正如你所看到的,这个命令会列出每个提交的SHA-1校验和、作者的名字(执行 git add 的人)电子邮件地址提交时间以及提交说明git log有许多选项可以帮助你搜寻你所要找的提交, 接下来我们介绍些最常用的。

  1. -p:用来显示每次提交的内容差异,并显示每次git commit的变化,也可以加上-2来仅显示最近两次的提交。
  2. --stat:可以查看每次提交的简略的统计信息。
  3. --pretty:可以指定使用不同于默认格式的方式展示提交历史。这个选项有一些内建的子选项供你使用。
  • oneline: 将每个提交放在一行显示,查看的提交数很大时非常有用。完整命令格式为git log --pretty=oneline
  • short: 相比git log不显示提价时间。完整命令格式为git log --pretty=short
  • full:相比git log多了一个提交人(最后执行 git commit 的人)名字邮箱,少了提交时间。完整命令格式为git log --pretty=full
  • fuller:相比git log多了提交人人的名字邮箱时间。完整命令格式为git log --pretty=fuller
  • format:可自定义显示格式。完整命令格式为git log --pretty=format:"[自定义格式]"git log --pretty=format的常用格式
选项说明
%H提交的完整哈希值
%h提交的简写哈希值
%T树的完整哈希值
%t树的简写哈希值
%P父提交的完整哈希值
%p父提交的简写哈希值
%an作者名字
%ae作者的电子邮件地址
%ad作者修订日期(可以用 --date=选项 来定制格式)
%ar作者修订日期,按多久以前的方式显示
%cn提交者的名字
%ce提交者的电子邮件地址
%cd提交日期
%cr提交日期(距今多长时间)
%s提交说明
  1. --graph:展示你的分支和合并历史。 一般和git log --pretty=onelinegit 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 mastermaster分支推送到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]

参照文档