Git基本命令

内容简介

  • 获取Git仓库(init/clone)
  • 记录每次更新到仓库(commit)
  • 查看提交历史(log)
  • 撤销操作(--amend)
  • Git 别名(alias.)

获取Git仓库

获取Git仓库的方式有两种,一种是初始化一个仓库,把项目文件都添加到这个仓库中。另一种是从远程Git服务器把仓库下载到本地。

在现有目录中初始化仓库

打开命令窗口,进入项目的根目录下,输入以下命令
git init
该命令会在当前目录中创建一个.git的文件夹,可以使用ls -a查看。这时候我们初始化了一个git仓库,但是您的项目文件还没有被跟踪。如果想要被跟踪,需要先将文件添加到暂存区,之后再提交到git仓库中。

克隆Git服务器上面的仓库

如果你要修改已有的项目文件或者查看其他人的Git仓库文件,那么就需要从远程Git服务器把远程仓库下载到本地。克隆仓库的命令格式为git clone [url],比如:
git clone https://github.com/quanyipinghe/GitDemo.git
执行这个命令之后,会在当前目录生成一个名字为'GitDemo'的目录,该目录下包含了项目的文件和Git仓库(.git目录)。如果你想在clone仓库的时候自定义本地目录名字,那么就用这样的命令格式git clone [url] [目录名]

Git支持多种数据传输协议

  1. https://协议,比如上面的例子
  2. git://协议,git协议涉及到安全问题,如果是公开项目可以使用该协议
  3. SSH 协议,比如user@server:path/to/repo.git

记录每次更新到仓库

我们工作目录下的每一个文件都不外乎这两种状态:已跟踪或未跟踪。 已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改,已修改或已放入暂存区。 工作目录中除已跟踪文件以外的所有其它文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有放入暂存区。 初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态。
我们使用Git时,文件状态的声明周期如下图所示。

文件的状态变化生命周期

查看文件的状态

查看文件状态使用命令git status,如果在clone仓库以后首次使用此命令,那么我们会看到如下结果:

On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean

现在让我们在工作目录中新增一个README文件。如果目录中之前不存在这个文件,那么我们git status将看到如下结果

$echo 'My Project' > README
$git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
(use "git add <file>..." to include in what will be committed)

    README

nothing added to commit but untracked files present (use "git add" to track)

从状态报告中我们可以看出README文件处于未跟踪(untracked)状态,未跟踪的意思是之前的快照中没有该文件,Git也不会自动将其纳入跟踪范围,除非我们主动的将此文件添加到跟踪范围(暂存区)

跟踪新文件

其实在上面的状态报告中已经给我一些如何跟踪的提示了。跟踪某个新文件执行git add [file] 这个命令就可以了,此命令会将新文件添加到暂存区。再次查看状态我们可以看到

$git add README
$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: README

只要出现在Changes to be committed这句话下面,那么说明文件处于已暂存状态。此时我们我们也可以将文件提交到仓库中。

提交文件的变化

使用git commit -m [内容] 命令可以将暂存区的快照提交到版本库中。

$git commit -m "add file"
[master e0c323d] add file
1 file changed, 1 insertion(+)
create mode 100644 README

修改已跟踪的文件并查看状态

已被跟踪的文件被修改之后的状态

Changes not staged for commit下面说明该文件被修改了,但是没有放大暂存区。因此我们可以执行git add [文件] 命令将其添加到暂存区。

README文件状态

这个说明文件的修改已放到暂存区了。此时如果我们再次修改了工作目录的这个文件,我们再次查看文件状态如下:

README文件状态

如果此时我们执行提交操作,只会把暂存区的修改提交到本地仓库中,工作目录的修改并不会被提交。因此,如果我们修改了文件并且此修改有必要提交,那么请及时放到暂存区。

状态简览

git status此命令的输出非常详细,但不免有时候对于我们来说显得有点繁琐,此时,我们可以用更简单的命令来查看状态git status -s (git status --short)

文件状态

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

git diff命令将通过文件补丁的格式来具体显示文件的哪些行发生了变化。
要查看尚未暂存的文件做了什么修改,可以使用git diff命令

工作目录文件的修改

此命令比较的是工作目录中的当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容。

如果要查看已暂存的准备提交到版本库的修改可以使用git diff --cached命令或者git diff --staged命令

暂存区域文件的修改

跳过使用暂存区域来提交文件

如果您不想每次更新了工作目录的文件,然后都要先放到暂存区,之后再提交的话。那么我们可以跳过把变化的文件放到暂存区这一步,直接提交工作目录变化的文件到本地仓库中。我们可以在git commit 后面 加一个-a 参数就可以实现了。

提交

从这里我们可以看出,提交了工作目录和暂且区域文件的修改到仓库中。

移除文件

要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。

使用git rm [文件] 命令会将文件从暂存区移除并且也从工作目录移除。这样此文件就不会出现在未跟踪列表中了。

删除文件之后的状态

如果删除之前修改过该文件并且已经放到暂存区了,那么必须要用强制删除选项 -f

还有一种情况,如果我们只是简单的想让某个文件从版本库中移除,但是还想保留在本地磁盘上面。那么我们可以使用--cached选项。

让某个文件从跟踪目录中移除后的状态

文件重命名

重命名文件用的这个命令git mv [file1] [file2]

Paste_Image.png

其实上面这句命令相当于下面这三句命令

$mv README README.md
$git rm  README
$git add README.md

查看提交历史

在提交了若干次更新后或者从远程仓库下载下拉项目之后,我们想
查看文件的更新历史,此时我们就可以用git log命令了。

提交历史

git log有很多好用的参数。一个比较常用的就是-p,用来显示每次提交的内容差异。同时你也加上-2来显示最近两次的提交:

最近两次提交的差异

--stat选项可以查看每次提交的简略信息:

提交的简略信息

--pretty选项可以指定不同的默认格式来展示每次的提交历史,它有一些内建的子选项可以使用。比如oneline可以将信息放到一行显示,当提交历史比较多的时候很实用。另外还有short,full和fuller等。

pretty修改默认显示样式

但最有意思的format子选项,它可以指定显示的记录格式:

子选项format作用

关于这些占位符的意思,请看下图:

占位符的意思

--graph选项和format选项配合使用会有不一样的结果,如果有分之的话,因为它可以用不同的符号把分之给连接起来。

关于git log 的常用选项还有如下所有:

git log常用选项

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

log的限制性输出

撤销操作

在任何时候,你都有可能想要撤销某些操作。
如果我们提交完了,才发现漏掉了几个文件没有添加或者提交信息写错了,那么我们可以使用带有 --amend选项的提交命令重新提交。
$ git ci --amend -m "修改文件内容"
当你发现只是提交内容不对的时候,然后立马执行的上面这句命令,那么快照会保存不变,只是提交内容发生了变化。

$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend

最终你只会有一个提交--第二次提交的结果替代第一次的提交,提交信息不变。

取消暂存的文件

有时候我们想把两个修改的文件分两次提交,但是我们不小心把这两个文件都放到了暂存区,现在我们就想把不提交的那个文件从暂存区移除。
git reset HEAD [文件]将文件从暂存区移除

撤销暂存区文件

撤销对文件的修改

如果我们想撤销工作目录中我们修改的文件时,我们应该用下面这个命令:
git checkout -- [文件]
这个命令可以撤销在工作目录里面修改的但是没有放到暂存区的文件。

Git 别名

顾名思义,别名就是名字的别称。如果您用过svn命令的话,您应该知道svn有命令的缩写形式,那么Git命令有没有对应的缩写呢?当然也是有的,只是需要你去配置一下。
git config --global alias.[别称] 原命令
比如:

git config --global alias.ci commit
git config --global alias.st status
git config --global alias.unstage 'reset HEAD --' // 取消暂存的别名
...

其实当我们执行 git st的时候,就相当于执行了git status.
Git只是简单的将别名替换成对应的命令而已。
有了别名,我们就可以轻松很多了O(∩_∩)O~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容