git 命令行大全(更新中)

本文详细介绍了Git的各种命令行操作,包括初始化仓库、添加文件、提交更改、分支管理、合并与解决冲突、回退版本等核心功能,旨在帮助开发者全面掌握Git版本控制系统。

 

命令

 

 

$ git config --global user.name "John Doe"

$ git config --global user.email johndoe@example.com

 

当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改:

 

$ git config --list

查看配置

 

$ git help <verb>

$ git <verb> --help

$ man git-<verb>

使用 Git 时需要获取帮助

 

 

$ git init

项目git 初始化

 

$ git add *.c

$ git add LICENSE

$ git commit -m 'initial project version'

添加到下一次提交

 

 

$ git clone https://github.com/libgit2/libgit2

$ git clone https://github.com/libgit2/libgit2 mylibgit

克隆现有的仓库

 

$ git status

$ git status -s 命令或 git status --short 命令

检查当前文件状态

 

git diff

git diff —-cached     

git diff -—staged

查看已暂存和未暂存的修改

 

 

$ git commit

提交更新

 

$ rm PROJECTS.md

$ git status

$ git rm PROJECTS.md

彻底移除

 

$ git rm --cached README

$ git rm log/\*.log

$ git rm \*~

add后的暂存中提交总移除

 

$ git mv file_from file_to

移动文件和修改文件名

 

$ git log

$ git log -p -2

$ git log --pretty=oneline

$ git log --pretty=format:"%h - %an, %ar : %s"

历史

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

 

$ git log --oneline —decorate

你可以简单地使用 git log 命令查看各个分支当前所指的对象。 提供这一功能的参数是 --decorate

 

$ git commit --amend

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

这个命令会将暂存区中的文件提交。 如果自上次提交以来你还未做任何修改(例如,在上次提交后马上执行了此命令),那么快照会保持不变,而你所修改的只是提交信息。

 

$ git reset HEAD CONTRIBUTING.md

取消暂存的文件

 

$ git checkout -- CONTRIBUTING.md

撤消对文件的修改

你需要知道 git checkout -- [file] 是一个危险的命令,这很重要。 你对那个文件做的任何修改都会消失 - 你只是拷贝了另一个文件来覆盖它。 除非你确实清楚不想要那个文件了,否则不要使用这个命令。

 

 

$ git remote -v

$ git remote

$ git remote add pb https://github.com/paulboone/ticgit

$ git fetch pb

 查看远程仓库:

 

现在你可以在命令行中使用字符串 pb 来代替整个URL 例如,如果你想拉取 Paul 的仓库中有但你没有的信息,可以运行 git fetch pb

 

$ git fetch [remote-name]

$ git fetch [remote-name]  —-all

从远程仓库中抓取与拉取

 

$ git pull

自动的抓取然后合并远程分支到当前分支

 

$ git push origin master

 

推送到远程仓库

 

$ git remote show origin

查看远程仓库

 

$ git remote rename pb paul

$ git remote rm paul

远程仓库的移除与重命名

 

 

$ git tag

 

列出标签

 

$ git tag -a v1.4 -m 'my version 1.4'

 Git 中创建一个附注标签是很简单的。 最简单的方式是当你在运行 tag 命令时指定 -a 选项:

-m 选项指定了一条将会存储在标签中的信息。 如果没有为附注标签指定一条信息,Git 会运行编辑器要求你输入信息。

 

$ git show v1.4

通过使用 git show 命令可以看到标签信息与对应的提交信息:

 

$ git tag v1.4-lw

另一种给提交打标签的方式是使用轻量标签。 轻量标签本质上是将提交校验和存储到一个文件中 - 没有保存任何其他信息。 创建轻量标签,不需要使用 -a-s  -m 选项,只需要提供标签名字

 

$ git tag -a v1.2 9fceb02

后期打标签

你也可以对过去的提交打标签。 假设提交历史是这样的:

$ git log --pretty=oneline

166ae0c4d3f420721acbb115cc33848dfcc2121a started write support

9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile

964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo

现在,假设在 v1.2 时你忘记给项目打标签,也就是在 “updated rakefile” 提交。 你可以在之后补上标签。 要在那个提交上打标签,你需要在命令的末尾指定提交的校验和(或部分校验和):

$ git tag -a v1.2 9fceb02

可以看到你已经在那次提交上打上标签了:

 

 

$ git push origin v1.5

共享标签

默认情况下,git push 命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到共享服务器上。 这个过程就像共享远程分支一样 - 你可以运行 git push origin [tagname]

 

$ git checkout -b version2 v2.0.0

检出标签

 Git 中你并不能真的检出一个标签,因为它们并不能像分支一样来回移动。 如果你想要工作目录与仓库中特定的标签版本完全一样,可以使用 git checkout -b [branchname] [tagname] 在特定的标签上创建一个新分支

 

 

$ git branch testing

分支创建

 

$ git log --oneline —decorate

你可以简单地使用 git log 命令查看各个分支当前所指的对象。 提供这一功能的参数是 --decorate

 

$ git checkout testing

分支切换

这样 HEAD 就指向 testing 分支了。

 

$ git log --oneline --decorate --graph --all

项目分叉历史

 

$ git branch -v

 查看每一个分支的最后一次提交,可以运行 git branch -v 命令:

 

$ git branch —merged

$ git branch --no-merged

 

--merged  --no-merged 这两个有用的选项可以过滤这个列表中已经合并或尚未合并到当前分支的分支。如果要查看哪些分支已经合并到当前分支,可以运行 git branch --merged

 

git ls-remote (remote)

git remote show (remote)

通过 git ls-remote (remote) 来显式地获得远程引用的完整列表,或者通过 git remote show (remote) 获得远程分支的更多信息。

 

 git clone -o booyah

远程仓库名字 “origin” 与分支名字 “master” 一样,在 Git 中并没有任何特别的含义一样。 同时“master” 是当你运行 git init 时默认的起始分支名字,原因仅仅是它的广泛使用,“origin” 是当你运行 git clone 时默认的远程仓库名字。 如果你运行 git clone -o booyah,那么你默认的远程分支名字将会是 booyah/master

 

 git fetch origin 

git fetch —all  是将所有的都同步下来

从服务器同步下来

 

 git push (remote) (branch):

推送到服务器

 

 

 

 

 

 

 

 

HEAD

上一次提交的快照,下一次提交的父结点(运行git commit 以后的)

 

Index

预期的下一次提交的快照(运行git add 以后的)

 

Working Directory

沙盒(工作文档位置)

 

 

 

 

$ cat .gitignore

*.[oa]

*~

 

第一行告诉 Git 忽略所有以 .o  .a 结尾的文件。一般这类对象文件和存档文件都是编译过程中出现的。第二行告诉 Git 忽略所有以波浪符(~)结尾的文件,许多文本编辑软件(比如 Emacs)都用这样的文件名保存副本。 此外,你可能还需要忽略 logtmp 或者 pid 目录,以及自动生成的文档等等。 要养成一开始就设置好 .gitignore 文件的习惯,以免将来误提交这类无用的文件。

文件 .gitignore 的格式规范如下:

所有空行或者以  开头的行都会被 Git 忽略。

可以使用标准的 glob 模式匹配。

匹配模式可以以(/)开头防止递归。

匹配模式可以以(/)结尾指定目录。

要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。

所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。 星号(*)匹配零个或多个任意字符;[abc]匹配任何一个列在方括号中的字符(这个例子要么匹配一个a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0  9 的数字)。 使用两个星号(*表示匹配任意中间目录,比如`a/**/z` 可以匹配 a/za/b/z  `a/b/c/z`等。

我们再看一个 .gitignore 文件的例子:

# 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

 

https://git-scm.com/book/zh/v2/Git-基础-记录每次更新到仓库

 

 

log

17: 历史

git log 

git log 有许多选项可以帮助你搜寻你所要找的提交, 接下来我们介绍些最常用的。

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

$ git log -p -2

commit ca82a6dff817ec66f44342007202690a93763949

Author: Scott Chacon <schacon@gee-mail.com>

Date:   Mon Mar 17 21:52:11 2008 -0700

 

    changed the version number

 

diff --git a/Rakefile b/Rakefile

index a874b73..8f94139 100644

--- a/Rakefile

该选项除了显示基本信息之外,还附带了每次commit 的变化。 当进行代码审查,或者快速浏览某个搭档提交的 commit 所带来的变化的时候,这个参数就非常有用了。 你也可以为 git log 附带一系列的总结性选项。 比如说,如果你想看到每次提交的简略的统计信息,你可以使用 --stat 选项:

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

$ git log --pretty=oneline

ca82a6dff817ec66f44342007202690a93763949 changed the version number

085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test

a11bef06a3f659402fe7563abf99ad00de2209e6 first commit

但最有意思的是 format,可以定制要显示的记录格式。 这样的输出对后期提取分析格外有用 — 因为你知道输出的格式不会随着 Git 的更新而发生改变:

$ git log --pretty=format:"%h - %an, %ar : %s"

ca82a6d - Scott Chacon, 6 years ago : changed the version number

085bb3b - Scott Chacon, 6 years ago : removed unnecessary test

a11bef0 - Scott Chacon, 6 years ago : first commit

git log --pretty=format 常用的选项 列出了常用的格式占位符写法及其代表的意义。

Table 1. 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 命令支持的选项。 git log 的常用选项 列出了我们目前涉及到的和没涉及到的选项,以及它们是如何影响 log 命令的输出的:

Table 2. git log 的常用选项

选项

说明

-p

按补丁格式显示每个更新之间的差异。

--stat

显示每次更新的文件修改统计信息。

--shortstat

只显示 --stat 中最后的行数修改添加移除统计。

--name-only

仅在提交信息后显示已修改的文件清单。

--name-status

显示新增、修改、删除的文件清单。

--abbrev-commit

仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。

--relative-date

使用较短的相对时间显示(比如,“2 weeks ago”)。

--graph

显示 ASCII 图形表示的分支合并历史。

--pretty

使用其他格式显示历史提交信息。可用的选项包括onelineshortfullfuller  format(后跟指定格式)。

 

限制输出长度

除了定制输出格式的选项之外,git log 还有许多非常实用的限制输出长度的选项,也就是只输出部分提交信息。 之前你已经看到过 -2 了,它只显示最近的两条提交, 实际上,这是 -<n> 选项的写法,其中的 n 可以是任何整数,表示仅显示最近的若干条提交。 不过实践中我们是不太用这个选项的,Git 在输出所有提交时会自动调用分页程序,所以你一次只会看到一页的内容。

另外还有按照时间作限制的选项,比如 --since  --until 也很有用。 例如,下面的命令列出所有最近两周内的提交:

$ git log --since=2.weeks

这个命令可以在多种格式下工作,比如说具体的某一天 "2008-01-15",或者是相对地多久以前 "2 years 1 day 3 minutes ago"

还可以给出若干搜索条件,列出符合的提交。  --author 选项显示指定作者的提交,用 --grep 选项搜索提交说明中的关键字。 (请注意,如果要得到同时满足这两个选项搜索条件的提交,就必须用 --all-match 选项。否则,满足任意一个条件的提交都会被匹配出来)

另一个非常有用的筛选选项是 -S,可以列出那些添加或移除了某些字符串的提交。 比如说,你想找出添加或移除了某一个特定函数的引用的提交,你可以这样使用:

$ git log -Sfunction_name

最后一个很实用的 git log 选项是路径(path),如果只关心某些文件或者目录的历史提交,可以在git log 选项的最后指定它们的路径。 因为是放在最后位置上的选项,所以用两个短划线(--)隔开之前的选项和后面限定的路径名。

 限制 git log 输出的选项 中列出了常用的选项

Table 3. 限制 git log 输出的选项

选项

说明

-(n)

仅显示最近的 n 条提交

--since, --after

仅显示指定时间之后的提交。

--until, --before

仅显示指定时间之前的提交。

--author

仅显示指定作者相关的提交。

--committer

仅显示指定提交者相关的提交。

--grep

仅显示含指定关键字的提交

-S

仅显示添加或移除了某个关键字的提交

来看一个实际的例子,如果要查看 Git 仓库中,2008  10 月期间,Junio Hamano 提交的但未合并的测试文件,可以用下面的查询命令:

$ git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \

   --before="2008-11-01" --no-merges -- t/

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值