git常用命令介绍和使用

摘要:本篇文章将记录git常用命令介绍和使用,主要包括clone、init、add、mv、reset、rm、log、status、branch、checkout、commit、fetch、pull、push。

clone:克隆一个仓库到新目录

从远程主机克隆一个版本库。

$ gitclone<版本库的网址>

比如版本库网址为https://github.com/naffitary/gitstudy.git

$ gitclonehttps://github.com/naffitary/gitstudy.git

该命令会在本地主机生成一个目录,与远程主机的版本库同名 。

如果要指定不同的目录名,可以将目录名作为git clone命令的第二个参数。

$ git clone<版本库的网址><本地目录名>

比如

$ gitclonehttps://github.com/naffitary/gitstudy.git project.git

该命令会在当前目录下生成project.git 内容从版本库的网址中克隆。

git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等。

init:创建一个空的Git仓库或重新初始化现有的Git仓库

运用mkdir命令创建一个git目录

$mkdirproject.git

创建了project.git 目录,但没有输出。

切换到xxx.git目录(这里我用的是project)下

$cdproject.git/

切换到project.git目录下,没有输出。

显示目标列表,跟后面产生对比

$ls

没有输出。

初始化仓库

$ git--bare init

输出Initialized empty Git repository in D:/php相关/git/Git/project.git/,表示初始化完毕,没有出错。而且project.git 目录会有bare标志,显示为project.git (BARE:master)

再次显示目标列表,跟前面产生对比

$ls

输出project.git 下的目标列表config description HEAD hooks/ info/ objects/ refs/

add: 添加文件内容到索引

git add , 只将那些创建或修改并且没有被删除的文件添加到索引,其中可以是文件,也可以是目录。(aa就是我建的一个目录。)

$gitaddaa

这里我遇到一个问题,正确add任何存在的文件会提示错误信息,其它git所属命令(除init)也会提示错误信息:fatal: This operation must be run in a work tree。通过查找资料和实践发现,可能是我创建的是空仓库的缘故,在git --bare init之后,先后输入git init和git remote add origin命令然后git add aa,就可以正确添加了。

git add -u ,把中所有跟踪文件中被修改过或已删除文件的信息添加到索引库。 它不会处理没有跟踪的文件。

$gitadd-u  aa

git add -A ,把中所有跟踪文件中被修改过或已删除文件和所有未跟踪的文件信息添加到索引库。

比如,$git add -A aa

git add -i , 查看中被所有修改过或已删除文件但没有提交的文件,

并通过其revert子命令可以查看中所有未跟踪的文件,同时进入一个子命令系统。

比如

$gitadd -iaa

git add --all,添加当前目录下的所有的目录和文件。

$ gitadd--all

以上前4点,都可以用.表示路径path,表示当前目录。$git add .,$ git add -u. ,$ git add -A .,$ git add -i .。

比如 输入

$ gitadd-i .

输出以下信息。

staged    unstaged path

1:        +1/-0+0/-0gitstudy

*** Commands ***

1:status2: update3:revert4: add untracked

5: patch6:diff7:quit8: help

选择子命令command(注意:可以输入序号,也可以输入命令单词),命令1是状态,显示路径上的变化;命令2是更新,将工作状态树添加到更改组 ;命令3是还原,还原更改组到头版本;命令4是添加未跟踪,添加未跟踪文件的内容到更改组;命令5是修补程序即补丁,挑选可行的以及选择性更新;命令6是差异, 比较单个文件或者目录内容;命令7是退出,退出该命令选项;命令8是帮助,显示其他命令的作用,帮助使用。

mv:移动或重命名文件,目录或符号链接

用$ ls查看当前目录下的文件和目录,可以看看准备移动的文件存不存在,为后面操作做准备。可以看到当前目录下有以下文件和目录11.txt aa/ pro.git/ README.md。

移动11.txt到aa目录下:

$ git mv11.txtaa

移动完后,查看一下状态,看看有没有移动成功。

$ git status-s

可以看到状态结果如下:

Aaa/11.txt

?? pro.git/

或者再用$ ls查看当前目录下的文件和目录,可以看到,当前目录下文件和目录为aa/ pro.git/ README.md,aa目录下多了11.txt,也能说明移动成功。

reset: 将当前HEAD复位为指定状态

如果发现错误的将不想staging的文件add进入index之后,想回退取消,则可以使用如下命令:

gitresetHEAD...

同时git add完毕之后,git也会做相应的提示。

git reset[--mode ][或HEAD]

将当前的分支重设(reset)到指定的或者HEAD(如果不显示指定commit,默认是HEAD,即最新的一次提交)。mode的取值可以是hard、mixed。

gitreset--hard

重设index和working directory,自从以来在working directory中的任何改变都被丢弃,并把HEAD指向。

gitreset--mixed

仅重设index,但是不重设working directory。这个模式是默认模式,即当不显示告知git reset模式时,会使用mixed模式。这个模式的效果是,working directory中文件的修改都会被保留,不会丢弃,也不会被标记成"Changes to be committed"。

rm:从工作树和索引中删除文件

使用格式:

git rm [] [--] ...

-n, --dry-run          干运行

-q, --quiet              不列出删除的文件

--cached                只能从索引中删除

-f, --force                覆盖最新的检查

-r                            允许递归删除

--ignore-unmatch    退出零状态即使没有匹配

注意:$ git rm文件名 ,必须在跟踪并提交到仓库中即add和commit后,才能删除。如果是已提交并修改后的文件和目录,需要用git commit -a -m文件名或git commit -a选择提交,不然会提示错误信息,error: the following file has local modifications:文件在本地被修改了。直接用git commit -m文件名或git commit选择提交是无法正常删除的,因为虽然没有提示错误信息但实际上并没有commit成功。

log:显示提交日志

不带参数,会显示所有的历史记录

$gitlog

按时间输出,最近的在最上面,

commit8deb05890c4a3d3a5da0085e8d93fde6a8105076 (HEAD->master, origin/master, origin/HEAD)

Author: naffitary <2219165492@qq.com>

Date:  Wed Jul513:32:372017+0800

Initialcommit

带参数-p,按补丁显示每个更新间的差异。

commit8deb05890c4a3d3a5da0085e8d93fde6a8105076 (HEAD->master, origin/master, origin/HEAD)

Author: naffitary <2219165492@qq.com>

Date:  Wed Jul513:32:372017+0800

Initialcommit

diff--git a/README.md b/README.md

newfilemode100644

index0000000..a077ed0

--- /dev/null

+++ b/README.md

@-0,0+1@@

+# gitstudy

\Nonewlineatendoffile

带参数--stat,显示每次更新的修改文件的统计信息,每个提交都列出了修改过的文件,以及其中添加和移除的行数,并在最后列出所有增减行数小计

$ git status-s

输出信息没有-p命令详细。

AD aa/gitstudy.git

??11.txt

??  pro.git

status:显示工作树状态

输出详细状态信息用$ git status,输出简短状态信息用$ git status -s。

branch:列表,创建或删除分支

git branch命令的-r选项,可以用来查看远程分支。

$ gitbranch-r

输出

origin/master

-a选项查看所有分支。

$ gitbranch-a

输出

*master

remotes/origin/master

上面命令表示,本地主机的当前分支是master,远程分支是origin/master。

checkout:切换分支或恢复工作树文件

使用git checkout命令创建一个新的分支。

$ git checkout -bnewBrachorigin/master

上面命令表示,在origin/master的基础上,创建一个新分支。

此外,也可以使用git merge命令或者git rebase命令,在本地分支上合并远程分支。

$ git merge origin/master

或者

$git rebase origin/master

上面命令表示在当前分支上,合并origin/master。

commit:将更改记录添加到仓库中

注意:养成在一开始就输入以下命令,来事先设置邮箱和用户名,以防远程操作的命令出错。

$ gitconfig--global user.email “2219165492@qq.com”

$ gitconfig--global user.name “naffitary”

$git commit  -m"提交的描述信息"

如果我们这里不用-m参数的话,即$ git commit;git将调到一个文本编译器(通常是vim)来让你输入提交的描述信息,前面有#将会被无视,若想被commit去掉前面的#并ZZ或:wq保存并退出,git commit -a也是如此。

$ git commit -a-m"提交的描述信息"

git commit命令的-a选项可只将所有被修改或者已删除的且已经被git管理的文档提交到仓库中。如果只是修改或者删除了已被Git管理的文档,是没必要使用git add命令的。

git add .命令除了能够判断出当前目录(包括其子目录)所有被修改或者已删除的文档,还能判断用户所添加的新文档,并将其信息追加到索引中。

$ gitcommit--amend

对于已经修改提交过的注释,如果需要修改,可以借助git commit --amend来进行。

fetch:从另一个存储库下载对象和引用

将远程主机的版本库的更新(Git术语叫做commit)取回本地。默认情况下,git fetch取回所有分支(branch)的更新。

$ git fetch<远程主机名>

比如,

$git fetch origin

如果只想取回特定分支的更新,可以指定分支名。

$ git fetch<远程主机名><分支名>

比如,

$ git fetch originmaster

pull:从另一个存储库或本地分支中拉取并集成

取回远程主机某个分支的更新,再与本地的指定分支合并。

$ git pull<远程主机名><远程分支名>:<本地分支名>

比如,取回origin主机的next分支,与本地的master分支合并:

$ git pull originnext:master

如果远程分支是与当前分支合并,则冒号后面的部分可以省略。

$git pull originnext

上面命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再做git merge。

$git fetch origin

$git merge origin/next

如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名。

$git pull origin

上面命令表示,本地的当前分支自动与对应的origin主机”追踪分支”进行合并。

如果当前分支只有一个追踪分支,连远程主机名都可以省略。

$git pull

上面命令表示,当前分支自动与唯一一个追踪分支进行合并。

push:推送更新远程引用以及关联的对象

将本地分支的更新,推送到远程主机。

$ git push<远程主机名><本地分支名>:<远程分支名>

注意,分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。

如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。

$ gitpushoriginmaster

上面命令表示,将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。

如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。

$ gitpushorigin:master

等同于

$ gitpushorigin--deletemaster

上面命令表示删除origin主机的master分支。

如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。

$ gitpushorigin

上面命令表示,将当前分支推送到origin主机的对应分支。

如果当前分支只有一个追踪分支,那么主机名都可以省略。

$ gitpush

如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push。

$ gitpush-uoriginmaster

上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。不带任何参数的git push,默认只推送当前分支,这叫做simple方式。此外,还有一种matching方式,会推送所有对应的远程分支的本地分支。如果要修改这个设置,可以采用git config命令。

$ gitconfig--global push.defaultmatching

或者

$ gitconfig--global push.defaultsimple

还有一种情况,就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要使用–all选项。

$git push --allorigin

上面命令表示,将所有本地分支都推送到origin主机。

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

推荐阅读更多精彩内容