git 常用命令


git常用命令

1、git的安装配置

1.1、安装git
在 Linux 上安装
如果你在基于 Fedora
$ sudo yum install git

如果你在基于 Debian 的发行版上,请尝试用 apt-get
$ sudo apt-get install git


1.2、使用 Git 来获取 Git 的升级
$ git clone git://git.kernel.org/pub/scm/git/git.git

1.3、安装完成的git配置
$ git config --global user.name "toloy"
$ git config --global user.email "274696224@qq.com"

1.4、配置默认的文本编辑器
Git 会使用操作系统默认的文本编辑器,通常是 Vim,如果你想使用不同的文本编辑器,例如 Emacs
$ git config --global core.editor emacs

1.5、检查配置信息
$ git config --list
会显示下面内容
core.symlinks=true
core.autocrlf=true
core.fscache=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
help.format=html
rebase.autosquash=true
http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
http.sslbackend=openssl
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
credential.helper=manager
user.name=toloy
user.email=274696224@qq.com
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
remote.origin.url=git@gitee.com:toloy/scrapy-tieba.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master

1.6、检查配置某一项的内容
$ git config user.name
toloy

2、git基础

2.1 在现有目录中初始化仓库
$ git init
该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。 但是,在这个时候,我们仅仅是做了一个初始化的操作,你的项目里的文件还没有被跟踪。

2.2 克隆现有的仓库 ,克隆仓库的命令格式是 git clone [url]
当你执行 git clone 命令的时候,默认配置下远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来
$ git clone https://github.com/libgit2/libgit2
这会在当前目录下创建一个名为 “libgit2” 的目录,并在这个目录下初始化一个 .git 文件夹,从远程仓库拉取下所有数据放入 .git 文件夹,然后从中读取最新版本的文件的拷贝,
如果你想在克隆远程仓库的时候,自定义本地仓库的名字,你可以使用如下命令:
$ git clone https://github.com/libgit2/libgit2 toloy

2.3 记录每次更新到仓库
你工作目录下的每一个文件都不外乎这两种状态:已跟踪或未跟踪。 已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改,已修改或已放入暂存区。 工作目录中除已跟踪文件以外的所有其它文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有放入暂存区。 初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态。
编辑过某些文件之后,由于自上次提交后你对它们做了修改,Git 将它们标记为已修改文件。 我们逐步将这些修改过的文件放入暂存区,然后提交所有暂存了的修改,如此反复。

2.4 检查当前文件状态
$ git status

2.5 跟踪新文件
$ git add s.py
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   s.py

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        git/

此时再运行 git status 命令,会看到 README 文件已被跟踪,并处于暂存状态
只要在 Changes to be committed 这行下面的,就说明是已暂存状态。 如果此时提交,那么该文件此时此刻的版本将被留存在历史记录中


2.6 暂存已修改文件
如果修改了一个文件,再查看状态如下 :
$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   s.py

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   s.py

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        git/

文件 s.py 出现在 Changes not staged for commit 这行下面,说明已跟踪文件的内容发生了变化,但还没有放到暂存区。 要暂存这次更新,需要运行 git add 命令
将这个命令理解为“添加内容到下一次提交中”而不是“将一个文件添加到项目中”要更加合适

2.7 状态简览命令
$ git status -s  或 $git status --short
A  s.py
?? git/

$ git status -s
A  s.py
M  test.py
 M tieba.py
?? git/

新添加的未跟踪文件前面有 ?? 标记
新添加到暂存区中的文件前面有 A 标记
修改过的文件前面有 M 标记 出现在右边的 M 表示该文件被修改了但是还没放入暂存区 出现在靠左边的 M 表示该文件被修改了并放入了暂存区

2.8 忽略文件
一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。
我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式
$ cat .gitignore
*.[oa]
*~
第一行告诉 Git 忽略所有以 .o 或 .a 结尾的文件
第二行告诉 Git 忽略所有以波浪符(~)结尾的文件
可以使用标准的 glob 模式匹配

匹配模式可以以(/)开头防止递归
匹配模式可以以(/)结尾指定目录
星号(*)匹配零个或多个任意字符
[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c)
问号(?)只匹配一个任意字符
如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)
使用两个星号(*) 表示匹配任意中间目录,比如`a/**/z` 可以匹配 a/z, a/b/z 或 `a/b/c/z`等
比如:
# no .a files
*.a

# but do track lib.a, even though you're ignoring .a files above
!lib.a

# only ignore the TODO file in the current directory, not subdir/TODO
/TODO

# ignore all files in the build/ directory
build/

# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt

# ignore all .pdf files in the doc/ directory
doc/**/*.pdf

2.9 查看已暂存和未暂存的修改
要查看尚未暂存的文件更新了哪些部分,不加参数直接输入 git diff
$ git diff
warning: LF will be replaced by CRLF in s.py.
The file will have its original line endings in your working directory.
diff --git a/s.py b/s.py
index c5019c3..5e5aefe 100644
--- a/s.py
+++ b/s.py
@@ -1,2 +1,3 @@
 print('s')
 print('abc')
+print("aaaaaaa")

fengxing@DESKTOP-T57P58F MINGW64 ~/gittest/scrapy-tieba (master)

若要查看已暂存的将要添加到下次提交里的内容,可以用 git diff --cached 命令
$ git diff --cached
diff --git a/s.py b/s.py
new file mode 100644
index 0000000..c5019c3
--- /dev/null
+++ b/s.py
@@ -0,0 +1,2 @@
+print('s')
+print('abc')
diff --git a/test.py b/test.py
index 5b33a4d..07d242d 100644
--- a/test.py
+++ b/test.py
@@ -1 +1,2 @@
 print("abc")
+print('111')
diff --git a/tieba.py b/tieba.py
index aa76653..10900ed 100644
--- a/tieba.py
+++ b/tieba.py
@@ -1,2 +1,3 @@
 print("hello tieba")

+print("33333333333")

fengxing@DESKTOP-T57P58F MINGW64 ~/gittest/scrapy-tieba (master)

2.10 提交更新
在此之前,请一定要确认还有什么修改过的或新建的文件还没有 git add 过,否则提交的时候不会记录这些还没暂存起来的变化。
这些修改过的文件只保留在本地磁盘。 所以,每次准备提交前,先用 git status 看下,是不是都已暂存起来了, 然后再运行提交命令 git commit:
$ git commit
在开头还有一空行,供你输入提交说明,保存退出后会提交

你也可以在 commit 命令后添加 -m 选项,将提交信息与命令放在同一行,如下所示:
$ git commit -m "Story 182: Fix benchmarks for speed"

2.11 跳过使用暂存区域
Git 提供了一个跳过使用暂存区域的方式, 只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤:

2.12 移除文件
要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。 可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。

如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f(译注:即 force 的首字母)。 这是一种安全特性,用于防止误删还没有添加到快照的数据,这样的数据不能被 Git 恢复。

我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。 换句话说,你想让文件保留在磁盘,但是并不想让 Git 继续跟踪。 当你忘记添加 .gitignore 文件,不小心把一个很大的日志文件或一堆 .a 这样的编译生成文件添加到暂存区时,这一做法尤其有用。 为达到这一目的,使用 --cached 选项:
$ git rm --cached README
git rm 命令后面可以列出文件或者目录的名字,也可以使用 glob 模式。 比方说:
$ git rm log/*.log

2.13 移动文件
要在 Git 中对文件改名,可以这么做
$ git mv file_from file_to
其实,运行 git mv 就相当于运行了下面三条命令:
$ mv README.md README
$ git rm README.md
$ git add README


2.14 查看提交历史
完成这个任务最简单而又有效的工具是 git log 命令。
默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面。

一个常用的选项是 -p,用来显示每次提交的内容差异。 你也可以加上 -2 来仅显示最近两次提交:
$ git log -p -2

你也可以为 git log 附带一系列的总结性选项。 比如说,如果你想看到每次提交的简略的统计信息,你可以使用 --stat 选项:
$ git log --stat
--stat 选项在每次提交的下面列出所有被修改过的文件、有多少文件被修改了以及被修改过的文件的哪些行被移除或是添加了。 在每次提交的最后还有一个总结。

另外一个常用的选项是 --pretty
这个选项可以指定使用不同于默认格式的方式展示提交历史。 这个选项有一些内建的子选项供你使用。 比如用 oneline 将每个提交放在一行显示,查看的提交数很大时非常有用。 另外还有 short,full 和 fuller 可以用,展示的信息或多或少有些不同,请自己动手实践一下看看效果如何。
$ git log --pretty=oneline

$ git log --pretty=format
%H 提交对象(commit)的完整哈希字串
%h 提交对象的简短哈希字串
%T 树对象(tree)的完整哈希字串
%t 树对象的简短哈希字串
%P 父对象(parent)的完整哈希字串
%p 父对象的简短哈希字串
%an 作者(author)的名字
%ae 作者的电子邮件地址
%ad 作者修订日期(可以用 --date= 选项定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者(committer)的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式显示
%s 提交说明


git log 的常用选项

-p     按补丁格式显示每个更新之间的差异。
--stat    显示每次更新的文件修改统计信息。
--shortstat  只显示 --stat 中最后的行数修改添加移除统计。
--name-only  仅在提交信息后显示已修改的文件清单。
--name-status 显示新增、修改、删除的文件清单。
--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
--relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。
--graph   显示 ASCII 图形表示的分支合并历史。
--pretty  使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。

还有按照时间作限制的选项,比如 --since 和 --until 也很有用。 例如,下面的命令列出所有最近两周内的提交:
$ git log --since=2.weeks

限制 git log 输出的选项
-(n)   仅显示最近的 n 条提交
--since,--after 仅显示指定时间之后的提交。
--until,--before仅显示指定时间之前的提交。
--author  仅显示指定作者相关的提交。
--committer  仅显示指定提交者相关的提交。
--grep   仅显示含指定关键字的提交
-S     仅显示添加或移除了某个关键字的提交

2.15 撤消操作
有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选项的提交命令尝试重新提交:
$ git commit --amend

例如,你提交后发现忘记了暂存某些需要的修改,可以像下面这样操作:
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
最终你只会有一个提交 - 第二次提交将代替第一次提交的结果。

使用 git reset HEAD <file>... 来取消暂存
$ git reset HEAD CONTRIBUTING.md

撤消对文件的修改
$ git checkout -- CONTRIBUTING.md

2.16 远程仓库的使用
查看远程仓库
如果想查看你已经配置的远程仓库服务器,可以运行 git remote 命令
你也可以指定选项 -v,会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL。
$ git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)

原文地址:https://www.cnblogs.com/toloy/p/8965900.html