Git 常用命令行

参考学习地址:https://backlog.com/git-tutorial/cn/intro/intro4_2.html

git本地存储结构

1.新建git本地数据库

按照以下步骤把新创建的tutorial目录设置到Git数据库。

$ mkdir tutorial   //创建tutorial文件夹
$ cd tutorial        //进入文件夹
$ git init              //初始化git数据库

=========================================

2.查看工作树和索引状态
$ git status

=========================================

3.将改动文件(包括增删改等操作)添加到索引中

将文件加入到索引,就可以追踪它的变更了。使用add命令。在<file>指定加入索引的文件。用空格分割可以指定多个文件。

$ git add <file> <file> ...

如果要把所有改动的文件都加入到索引中,则可以使用:

$ git add .

=========================================

4.将索引区文件提交到本地数据库中
$ git commit -m "描述内容"

注解一般格式为:

第1行:提交修改内容的摘要
第2行:空行
第3行以后:修改的理由

提交完之后可以使用$ git status确认状态

5.查看本地数据库提交状态
$ git log

=========================================

6.给远程数据库起别名,一般为origin

我们可以给远程数据库取一个别名。这样,下次推送的时候就不需要输入长串的远程数据库地址了。在这个教程里,我们的远程数据库命名为“origin”。

请使用remote指令添加远程数据库。在<name>处输入远程数据库名称,在<url>处指定远程数据库的URL。

$ git remote add <name> <url>

执行推送或者拉取的时候,如果省略了远程数据库的名称,则默认使用名为”origin“的远程数据库。因此一般都会把远程数据库命名为origin。

=========================================

7.将本地创建的数据库推送到远程

我们首先在本地创建了一个数据库,然后在github上创建了一个远程仓库,现在要把本地的数据库内容推送到github上这个远程仓库中:
使用push命令向数据库推送更改内容。<repository>处输入目标地址,<refspec>处指定推送的分支。

$ git push <repository> <refspec>

当执行命令时,如果您指定了-u选项,那么下一次推送时就可以省略分支名称了。但是,首次运行指令向空的远程数据库推送时,必须指定远程数据库名称和分支名称。

$ git push -u origin master

=========================================

8.将远程仓库克隆到本地

使用clone指令可以复制数据库,在<repository>指定远程数据库的URL,
在<directory>指定新目录的名称。

$ git clone <repository> <directory>

比如:

$ git clone https://nulab.backlog.jp/git/BLG/tutorial.git tutorial2

=========================================

9.在克隆的本地数据库推送数据

当在克隆的数据库目录执行推送时,您可以省略数据库和分支名称。

$ git push

=========================================

10.将远程数据库内容拉到本地

使用pull指令进行拉取操作。省略数据库名称的话,会在名为origin的数据库进行pull。

$ git pull <repository> <refspec>

例如:

$ git pull origin master

拉取完成后,我们使用log指令来确认历史记录是否已更新

=========================================

11.解决冲突

如果执行push的时候提示报错:

To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

则说明我们修改并要push的文件,在远程仓库已经有了新的修改
首先我们需要拉取到远程的最新修改:

$ git pull <repository> <refspec>   //比如$ git pull origin master

这时候终端会显示出冲突文件:

CONFLICT (content): Merge conflict in sample.txt

找到目标文件修改冲突后,文件的内容发生了修改,所以需要进行提交:

$ git add sample.txt
$ git commit -m "合并"

这样就完成了从远程数据库导入最新的修改内容。
我们可以用log命令来确认数据库的历史记录是否准确。指定--graph选项,能以文本形式显示更新记录的流程图。指定--oneline选项,能在一行中显示提交的信息。

$ git log --graph --oneline

确认无误后,就可以执行push操作提交到远程了。

=========================================

12.建立分支

创建名为issue1的分支。 可以通过branch命令来创建分支。

$ git branch <branchname> // $ git branch issue1
创建名为issue1的分支。

不指定参数直接执行branch命令的话,可以显示分支列表。 前面有*的就是现在的分支。

$ git branch
  issue1
* master

=========================================

13.切换分支

若要在新建的issue1分支进行修改提交,需要切换到issue1分支。
要执行checkout命令以切换到目标分支。

$ git checkout <branch>    //$ git checkout issue1
切换到issue1分支。

注意创建并切换分支:
在checkout命令指定 -b选项执行,可以创建分支并进行切换。

$ git checkout -b <branch>

=========================================

14.merge合并分支 fast-forward

执行merge命令以合并分支。

$ git merge <commit> //该命令将指定分支导入到HEAD指定的分支。

先切换master分支:

$ git checkout master
Switched to branch 'master'

然后把issue1分支导入到master分支:

$ git merge issue1

master分支指向的提交移动到和issue1同样的位置。这个是fast-forward(快进)合并。

=========================================

15.解决合并冲突

首先创建issue2分支和issue3分支,并切换checkout到issue2分支修改内容addcommit后,
然后切换checkout到issue3分支修改内容addcommit

要把issue2分支和issue3分支的修改合并到master:

  1. 切换master分支后,与issue2分支合并,执行fast-forward(快进)合并。


    快进合并
$ git checkout master
Switched to branch 'master'
$ git merge issue2

2.接着合并issue3分支:

$ git merge issue3
Auto-merging myfile.txt
CONFLICT (content): Merge conflict in myfile.txt
Automatic merge failed; fix conflicts and then commit the result.

自动合并失败。由于在同一行进行了修改。修改冲突的部分,重新提交。

$ git add myfile.txt
$ git commit -m "合并issue3分支"
非快进合并

历史记录如图所示。因为在这次合并中修改了冲突部分,所以会重新创建合并修改的提交记录。这样,master的HEAD就移动到这里了。这种合并不是fast-forward合并,而是non fast-forward合并。

=========================================

16.rebase合并分支

合并上述15条中的issue3分支的时候,使用rebase可以使提交的历史记录显得更简洁。
切换到issue3分支后,对master执行rebase。

$ git checkout issue3
Switched to branch 'issue3'
$ git rebase master

此时终端冲突报错,和merge时的操作相同,修改冲突提交

$ git add myfile.txt
$ git rebase --continue

状态如下:


rebase的时候,修改冲突后的提交不是使用commit命令,而是执行rebase命令指定 --continue选项。若要取消rebase,指定--abort选项。
这样,在master分支的issue3分支就可以fast-forward合并了。切换到master分支后执行合并:

$ git checkout master
Switched to branch 'master'
$ git merge issue3
Updating 8f7aa27..96a0ff0
Fast-forward

此时状态如下:


=========================================

17.删除分支

在branch命令指定-d选项执行,以删除分支。

$ git branch -d <branchname>  // $ git branch -d issue1
执行以下的命令以删除issue1分支。

issue1分支被删除了。您可以用branch命令来确认分支是否已被删除。

$ git branch
* master

=========================================

18.添加轻标签tag

使用tag命令来添加标签,在<tagname>执行标签的名称:

$ git tag <tagname>  // $ git tag apple
在HEAD指向的提交里添加名为apple的标签,请执行以下的命令。

如果没有使用参数而执行tag,可以显示标签列表:

$ git tag

如果在log命令添加 --decorate选项执行,可以显示包含标签资料的历史记录:

$ git log --decorate
commit e7978c94d2104e3e0e6e4a5b4a8467b1d2a2ba19 (HEAD, tag: apple, master)
Author: yourname <yourname@yourmail.com>
Date:   Wed Jul 18 16:43:27 2012 +0900

    first commit

=========================================

19.给轻标签tag添加注解

若要添加注解标签,可以使用-m:

$  git tag -m "add bundle" 1.0.1
在HEAD指向的提交里添加名为banana的标签。

也可以指定-m选项来添加注解:

 git tag -a tagname -m "comments"   //本地创建

如果在tag命令指定-n选项执行,可以显示标签的列表和注解:

$ git tag -n
apple           first commit
banana          连猴子都懂的Git

提交tag到远程:

git push origin tagname //提交单个标签
git push origin --tags      //提交所有标签

=========================================

20.删除标签

若要删除标签,在tag命令指定 -d选项执行。

$ git tag -d <tagname>

=========================================

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

推荐阅读更多精彩内容