git经常使用命令html
一、git的安装配置git
1.一、安装git
在 Linux 上安装
若是你在基于 Fedora
$ sudo yum install gitgithub
若是你在基于 Debian 的发行版上,请尝试用 apt-get
$ sudo apt-get install git安全
1.二、使用 Git 来获取 Git 的升级
$ git clone git://git.kernel.org/pub/scm/git/git.git服务器
1.三、安装完成的git配置
$ git config --global user.name "toloy"
$ git config --global user.email "274696224@qq.com"scrapy
1.四、配置默认的文本编辑器
Git 会使用操做系统默认的文本编辑器,一般是 Vim,若是你想使用不一样的文本编辑器,例如 Emacs
$ git config --global core.editor emacs编辑器
1.五、检查配置信息
$ 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.六、检查配置某一项的内容
$ git config user.name
toloyfetch
二、git基础ui
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 -vorigin https://github.com/schacon/ticgit (fetch)origin https://github.com/schacon/ticgit (push)