您的位置:首页 > 运维架构 > Shell

GitHub教程 Git bash超详细教程(上)

2018-01-17 16:12 204 查看
作为一个萌新,我翻遍了网上的Git Bash教程,可能因为我理解力比较差,经常看不懂教程上在说什么。 (。-`ω´-)所以我决定自己一边摸索一边记录,写教程造福那些理解力跟我一样差的人……

第一篇教程会涉及如下内容(按照一般人的使用流程):

下载、登录Git Bash

如何在Git Bash中进入或者退出文件夹

如何建立本地仓库

配置SSH key

如何建立本地仓库和远程仓库的连接

如何克隆远程仓库

远程仓库改变后如何更新本地仓库

这个主要介绍Git Bash的使用教程。首先抛一个Windows用户的下载链接:Git for windows

下载下来之后我的电脑上是显示了这么三个东西的,刚才的下载页面也对这些工具进行了一些相应的介绍。下面我大致说一下吧……



- Git CMD:

  Git CMD我并没用过,但是我查了一下它是什么。据别人说,Git中的Bash是基于CMD的,在CMD的基础上增添一些新的命令与功能。所以建议在使用的时候,用Bash更加方便(原网址)。

- Git GUI:

  其次就是Git GUI,Git GUI是Git Bash的替代品,他为Windows用户提供了更简便易懂的图形界面。(但是相比GitHub Desktop这个桌面版客户端,_(:3 」∠)我觉得Git GUI也没什么用。)

- Git Bash:

  最后是Git Bash,Git Bash是命令行操作,官方介绍有一句就是“让*nix用户感到宾至如归。”(ಥ_ಥ 当然了,萌新用户使用了就肥肠憋屈。)

1.登录

下载之后打开是这个样子的,那你想一下,第一件事一定要登录了。你在网页上已经申请了你的账号了,现在你就要登录进去。



然后输入:

git config –global user.name “Your Name”

git config –global user.email “email@example.com”



这个时候就登陆了。你就可以执行一些操作了。

2.本地的文件夹基本操作

首先你可以试着打开你本地仓库的文件夹。比如我要打开D:\github\Sian-s-Diary有两种方法

直接在电脑上打开那个文件夹,然后在文件夹空白处右键选择Git Bash here

在Git Bash中输入路径

①可以逐个输入文件夹名(在文件夹名称前要加cd )



②也可以直接输入一个完整的文件夹路径cd d:/github/Sian-s-Diary



  注意!使用cd命令进入到目录中时,在Git-Bash中应该使用斜线”/”, 而不是反斜线”\”

看上面两个图的[b]图一: 其中黄色框框是显示我输入的这个文件夹不存在, 绿色框框是文件夹存在的,然后那个红色框框是你现在所在位置。然后看图二:图二红色框是一个显示所在文件夹的命令行。也就是说你如果想在Git Bash中知道你现在在哪个文件夹中操作,可以直接看后边的路径,也可以输入pwd,回车之后进行查看。[/b]

$ pwd

你们可能还会有个疑问,为什么我有的文件夹之后显示了master,有的却没显示。因为我显示了master的是已经建立过仓库的文件夹了。



当然你也可能进错文件夹,要学会回退。

$ cd ..

..和cd之间有空格

就可以回退到上一个文件夹。



当然除了你也可以直接在Git Bash里直接新建文件夹

进入某个文件夹之后输入(如下)即可

$ mkdir +文件夹名字

例如我要在D:\github\000 下新建一个叫“111”的文件夹。



第一行黄色文字显示我已经进入了000这个文件夹,然后输入即可创建。

删除文件

输入

$ rm 文件名.文件类型

一定要输入类型啊

比如我要删除000中的“新建文本文档.txt”,操作如图。



3.现在我们来新建一个仓库

进入到你想建立本地仓库的文件夹,比如我的D:\github\Lolita。起初我这个Lolita文件夹是空的,并且不是本地仓库。



现在我只需要在Git Bash里先进入这个文件夹,确定已经进入了,我要把它变成本地仓库,需要输入以下命令行

$ git init



然后他就会告诉你建立成功了,这时候你的本地文件夹就出现了一个隐藏的.git文件夹 (。-`ω´-)千万不要乱删,你如果看他烦你就设置一下不现实隐藏文件就OK。至于为什么不能删,这你就要自己另行百度了。



这个时候本地仓库建立好了,你就可以在里面放东西了。比如我在文件夹里新建一个名为LolitaSian的txt文件,这时候你就可以告诉Git Bash你刚才更改了你的本地仓库。





$ git add+文件名.文件类型

例如图中,我在文件夹里添加了一个LolitaSian.txt,也就是说我修改了LolitaSian.txt,所以我在Git Bash中可以写git add LolitaSian.txt 来添加我的修改记录。但是你发现上一条git add readme.txt失败了,因为我在本地仓库中从没对这个进行我操作,所以没有修改记录,因此无法添加修改记录。

你也可能添加了很多文件,如果一个一个add肯定会累死,所以:

git add -A 提交所有变化

git add -
d81c
u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)

git add . 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件

修改之后就可以提交了。在git Bash中输入命令行即可。

$ git commit -m “修改注释”



怎样看你修改了什么呢?

这时候就要输入

$ git diff 文件名+类型



原来LolitaSian里边是三行文字,现在我新增了一行“啦啦啦啦”,然后在Git Bash里输入了git diff LolitaSian.txt就会出现我刚才都进行了什么修改。



你也可以看你这个文件的内容

$ cat 文件名



注意必须在文件夹里有那个文件你才可以查看。

注意ヽ(•̀ω•́ )ゝ这时候你的文件并没有同步到远程仓库!然后你就需要第四步了

4.本地仓库和远程仓库的骚操作

  当然使用过桌面版的应该知道,commit之后还有一个手动同步的步骤,在Git Bash中也是这样的。

  4.1在推到远程仓库之前需要配置SSHヽ(・ω・。)ノ点击进入《SSH Key配置教程》

  4.2我们刚才在步骤3中已经建立了本地仓库,那么现在只要在远程建一个仓库然后把他俩连接起来就OK。

首先你要进入网页版github新建一个仓库。(以下是简略建立过程,更详细教程可以戳这里:ヽ(・ω・。)ノ仓库的创建、同步、删除





因为我本地仓库文件夹名字叫Lolita,为了方便我把远程仓库也命名为Lolita。然后建立一个新的空仓库。



把上边绿框框切换到SSH,然后复制下边随便哪个框框的内容。在电脑上进入你建好本地仓库的文件夹右键点击Git Bash Here或者直接在Git Bash中输入命令行进入文件夹。

然后在Git Bash中输入

$ git remote add origin +你复制的内容

比如我输入$ git remote add origin git@github.com:Lolita-Sian/Lolita.git

然后他不会有任何提示,但是如果你不确定操作成功没有,你可以再输一遍,这时候他会提示你刚才已经设置过了。



或者说你输入git remote -v验证一下会出现你添加成功的远程仓库。

$ git remote -v

在这里说一下git remote add origin +你复制的内容,其实就是给本地仓库添加一个远程仓库,你复制的内容就是远程仓库地址,origin就是远程仓库的代称,你也可以取一个别的代称给他。

如果你以后不想连接这个远程仓库了,只需要输入git remote remove +代称即可。比如我刚才添加的远程仓库代称是origin,那我就要写:

git remote remove origin

然后在Git Bash中输入如下命令进行内容同步

$ git push -u 代称 master

如果刚才是git add remote origin +复制内容,就要写git push -u origin master

如果刚才是git add remote AAA +复制内容,就要写git push -u AAA master



这时候你就可以把你本地仓库的东西推到远程仓库了,并且你commit的信息也会同步过去。由于远程库是空的,我们第一次推送master分支时,加上了 –u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令,只输入(如下)就OK。

$ git push origin master

你去网页版刷新一下,就可以看到你本地仓库的东西都在那里了。然后点击commis还可以看到我在第三步中commit的操作记录。





还可以查看当前版本信息(也就是最近一个commit)

$ git log

也可以显示某个文件的版本历史,包括文件改名

$ git log –follow 文件名.文件类型

$ git whatchanged 文件名.文件类型

显示所有提交过的用户,按提交次数排序

$ git shortlog -sn

显示指定文件是什么人在什么时间修改过

$ git blame 文件名.文件类型

5.如何克隆一个远程仓库

现在我有一个叫000的远程仓库,并且里边有一个叫readme的文件。点击绿色按钮之后会弹出来。可以复制这一段(git@github.com:Lolita-Sian/000.git)。切换成HTTPS再复制也没影响。



然后在本地建好一个用于作为克隆的本地仓库的文件夹,在文件夹内右键-Git Bash Here。或者直接在Git Bash中进入。然后在Git Bash中输入

$ git clone 加上你刚才复制的那一块

例如我要输入$ git clone git@github.com:Lolita-Sian/000.git



然后你打开你刚才选的本地文件夹,远程仓库的东西都在本地了(。◕ˇ∀ˇ◕)。

远程仓库改变后如何更新本地仓库

  这一步很重要了,在团队合作中,你的队友修改了远程仓库之后,你如何确保自己的文件跟远程仓库一致呢,这就需要以下步骤了。

  在你刚才init或者Clone的过程中,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动连接到远程的origin/master分支。

  那么建立远程关系之后,如果你要取回远程文件,你只需要输入“ $ git pull origin”。

$ git pull origin

比如我现在跑到我的远程仓库修改了我的日记。我给日记加了一行测试。然后进行了pull。



这时候我打开我的本地日记,就发现加上来了。



  或者我也可以输入两句“git fetch”和“git merge”

$ git fetch

$ git merge

  然鹅!事情是这样的,当我输入完“git fetch”之后,我打开本地的日记,发现内容没变,当我输入完“git merge”的时候本地的日记才改变。



[b]但是看一下下图。[/b]



  我在fetch之后没有直接merge,而是在他俩之后都使用了 git status.可以看我在上图蓝色框框中有一个commit,但是我merge之后,就显示本地和远程的commit数据都一样了。也就是说git fetch 并没更改本地仓库的代码,只是拉取了远程 commit 数据,将远程仓库的 commit id 更新为latest。回想一下你刚才是怎么push到远程的,add-commit-push。而你拉回来也是这样,fetch-merge。fetch相当于add的逆操作,都是改变了commit。

  总结一下:pull=fetch+merge。pull:下拉远程分支并与本地分支合并。fetch并没更改本地仓库的代码,只是拉取了远程 commit 数据。

  另外补充一下。

$ git status

刚才提到了这个。status有什么作用呢。

- 上图中在fetch-merge中,可以提示你本地和远程的数据差异。如果你没有merge,status就会提示。

- 而在add-commit-push过程中,看下图。如果我修改了文件,没有add,status提示是红色的,add之后提示是绿色的,commit之后,工作树就是空的了。





last but not least,我是萝莉安, 梦想是当个小程序媛。 ಥ_ಥ 萝莉永不服输!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: