1、git的使用(git笔记)

这里我们使用Git Bash这个工具,具体安装过程这里不细说了,然后就是笔记是以李兴华老师的教程为基础的。

一、设置开发者的个人信息

设置全局信息
因为git是分布式版本控制系统,所以,每个机器都需要填写自己的基本信息:开发者名字、Email地址。

  • 姓名:git config --global user.name "yjaal"
  • email: git config --global user.email "xxx@gmail.com"
  • 查询全局信息:git config -l

说明:设置成功之后不会有任何提示信息,我们可以对全局信息进行查看,当然这里我已经在之前就设置好了,这里不给出相关的操作截图。

二、创建仓库

在仓库之中可以保存所有用户开发过程之中所编写的代码的日志记录。如果要开发项目,必须首先有一个仓库,可以简单理解为电脑中的一个文件夹。而我的电脑中所有的仓库都放在E:\github\LocalSource中,所以我们在这个文件夹中新建一个仓库:

git init mypro

1.png

此时我们可以看到相关的提示信息,这样我们就创建好了一个仓库,当然我们直接在电脑中查看,发现还是空的,但是我们使用Git Bash可以看到里面有一个.git的目录:

2.png

此目录就是用来保存仓库的相关版本信息的,一般不要对此目录做出任何改动。

三、添加文件

现在我们像仓库中增加一些代码,这里最好将代码的编码设置为UTF-8,避免出现一些不必要的问题。
在仓库中新建一个程序Hello.java

public class Hello{
    public static void main(String args[]){
        System.out.println("Hello World");
    }
}

然后我们使用命令:

git status

就可以查看那仓库中的改动情况

3.png

在状态信息中有一些提示信息:

  • on branch master表示现在的开发是在主分支上;
  • Initial commit表示初始化仓库的提交;
  • Untracked files表示未标记的文件;
  • 一些操作的命令(use "git add <file>..." to include in what will be committed
  • 标记文件的列表:Hello.java

将文件加入到暂存库之中:

git add Hello.java

当然如果有多个文件,则可以使用命令:

git add .

进行一次性添加所有改动。
同样不会有提示信息,我们再次查询仓库状态:

4.png

我们发现状态信息发生了改变,现在的文件并没有提交到主分支(真正要运行的程序的所有代码)上。

提交文件信息:

git commit -m "The first commit test"

注意:我们一般在提交的时候都需要使用-m参数来添加本次提交的一些提示信息。此时Hello.java文件就真正被提交到了主分支上了。

5.png

提交之后我们发现状态信息也发生了变化,意思是仓库中没有任何文件需要提交,仓库是干净的。但是我们不能每次都使用这个命令来查看相关信息,我们可以使用命令来专门查看Hello.java这个文件的日志信息。

查看Hello.java文件的日志信息:

git log Hello.java

查看日志信息时,有时候信息不会一下子就全部信息,我们可以使用回车向下查看,当出现一个END的时候我们可以输入一个字母q来结束日志信息的查看。

6.png

首先会出现一个提交的信息号

fa6e49279b6d94641d9fb94a08b68e3e0a416232

,可以理解为我们每次提交的一个id号,后面还有提交者和提交日期。如果有多次提交,那么日志信息也会越来越多。

注意:我们所有修改的代码都会被git监测到,所有的代码想要真正提交都需要进行两步操作,在使用git commit之前必须使用git add进行添加,当然我们也可以不分成两步进行,可以简化命令为git commit -a -m "some information"

四、修改仓库文件

下面我们看git如何控制文件修改。首先我们修改Hello.java文件:

public class Hello{
    public static void main(String args[]){
        System.out.println("Hello World");
        System.out.println("Hello World--001");
        System.out.println("Hello World--002");
    }
}

此时文件有两处修改。查询仓库状态:

7.png

现在git提示文件还没有保存到暂存区中,还给出了一些提示命令,要么使用命令git add将文件暂存,或者使用命令git checkout将文件恢复到没有改动的状态(后面会讲)。还提示我们Hello.java有改动。但是如果是别人查看此文件,那么这样他是不能知道此文件到底在哪些位置做出改动。此时我们需要查看文件的前后区别。

查看文件的前后区别:

git diff Hello.java
8.png

可以看到这里就详细显示出文件的详细改动信息,增加的行使用加号标记,当然删除的行也会使用减号标记。

现在我们使用简写命令进行提交:

git commit -a -m "some modifies"
9.png

提交之后我们还查询了日志信息,这里又多出了一个提交号。

五、 工作区与暂存区

  • 工作区就是当前电脑的操作目录mypro,之前我们修改或新建代码时保存在工作区之中,当我们使用git add之后就会保存到暂存区之中,这个暂存区可以理解为数据库操作中的事务操作。使用git commit之后才表示真正的发出了修改,而真正的可以运行的程序都保存在master分支上。

  • 保存在工作上的代码如果没有保存到暂存区是不能进行提交的。当我们将暂存区的代码提交到主分支上之后会自动的清空暂存区之中的内容。

六、版本回退

每当用户运行代码提交的时候都会自动生成一个提交号,而这个提交号就是进行代码回退的主要操作方式。
首先我们先增加一个文件Demo.java

public class Demo{
    public static void main(String args[]){
        System.out.println("The new file Demo.java");
    }
}

提交之后我们再进行一些修改:

public class Demo{
    public static void main(String args[]){
        System.out.println("The new file Demo.java" + "/" + "some modifies");
    }
}

同时我们对Hello.java也做一点修改后提交:

public class Hello{
    public static void main(String args[]){
        System.out.println("Hello World");
        System.out.println("Hello World--001");
        System.out.println("Hello World--002");
        System.out.println("modify");
    }
}

查询当前仓库的修改日志信息:

git log

此时我们发现信息有很多,而我们有时候只需要查看到信息中的提交号,那么可以这样:

git log --pretty=oneline
10.png

这样可以方便的查看所有提交的提交号,当然这些提交号不是顺序排列的。当然我们可以使用此工具的图形界面进行查看,当然我们不推荐。

在master分支上会有一个HEAD的指针,这个指针默认永远指向最后一次提交的位置。于是我们就可以使用此指针来进行回退。如果回退一步,那么之前的操作不会被删除,但是所有的代码将回归到指定的状态。

回退一步:

git reset --hard HEAD~1

其中--hard表示强制。

11.png

此时我们会发现代码就会退回到改动之前的状态。如果此时又想回到最新的状态,那么就必须找到所有的提交号,然后找到最新的提交号进行回退:

git reset --hard "d82a9cdaaeddf008b1f36dbbe896d4f7bebcedbb"

当然我们将提交号简写为其前7位也行:

git reset --hard "d82a9cd"

此时的代码就恢复到了最新的状态了。

七、文件修改问题

实际上,在有了暂存区和master主分支的概念之后,就需要回避一个问题,只有保存在暂存区中的内容才可以真正的被修改,而不是指工作区中的那个文件。下面我们通过例子进行说明。

首先修改Hello.java:

public class Hello{
    public static void main(String args[]){
        System.out.println("Hello World");
        System.out.println("Hello World--001");
        System.out.println("Hello World--002");
        System.out.println("Hello World--003");
    }
}

之后我们将其添加到暂存区:

git add .

然后再次修改此文件:

public class Hello{
    public static void main(String args[]){
        System.out.println("Hello World");
        System.out.println("Hello World--001");
        System.out.println("Hello World--002");
        System.out.println("Hello World--003");
        System.out.println("Hello World--004");
    }
}

但是这次修改我们不进行添加,此时我们直接进行提交:

git commit -m "change--003"

可以此时只是提交了第一次修改,而第二次修改并没有被提交。


12.png

可以看到我们提交之后再此查看仓库状态,发现第二次修改并没有被提交。我们将最新的代码和工作区中的代码进行比较:

git diff HEAD Hello.java

13.png

可以很明显的看到第二次修改并没有提交。
这就表明如果一个文件修改多次之后就需要多次的进行添加操作,否则在添加之前的修改是不会被提交的。

八、撤销修改

有这样一种情况即代码改动一半之后发现不需要修改,想要撤销。当然这也两种情况。

8.1 未添加&提交

  • 这种情况就是说有一次修改还没有进行添加,然后我们进行恢复。
  • 如果在工作区中的代码并没有增加到暂存区中,如果要恢复到原始状态是很容易的,我们在上一次操作中最后那次修改没有进行添加,此时我们进行恢复。
git checkout -- Hello.java

此时不会有任何提示信息,但是我们会发现工作区中的文件恢复到了原始状态:

public class Hello{
    public static void main(String args[]){
        System.out.println("Hello World");
        System.out.println("Hello World--001");
        System.out.println("Hello World--002");
        System.out.println("Hello World--003");
    }
}

8.2 添加&未提交

这种情况就是我们已经进行添加了,但是还没有提交到master之中。修改Hello.java:

public class Hello{
    public static void main(String args[]){
        System.out.println("Hello World");
        System.out.println("Hello World--001");
        System.out.println("Hello World--002");
        System.out.println("Hello World--003");
        System.out.println("Hello World--004");
    }
}

然后进行添加

git add .
14.png

这里我们看到其实已经给出了恢复的提示信息:

git reset HEAD Hello.java
15.png

注意:此时只是将代码从暂存区中推出,并没有将工作区文件恢复,我们可以再次查看仓库状态:


16.png

我们看到显示有个文件被修改了,需要进行添加。
当然此时我们可以很简单的恢复到原始状态了。这里我们最好养成良好的习惯,即在提交前将所有代码进行添加。

九、删除文件

这里我们删除Demo.java文件,但是在git中删除也是一个修改操作。

  • 1.从硬盘上删除Demo.java文件;
  • 2.查看仓库状态:


    17.png

    此时文件是从工作区中删除了,但是在主分支上还是存在的,我们提交更新来进行删除:

git commit -a -m "delete Demo.java"
18.png
  • 3.如果此时又发现文件删除错了,那么就应该进行恢复:
git checkout -- Demo.java
19.png

可以发现这样我们是恢复不了的,于是我们需要使用提交号进行恢复

git reset --hard 13e7f88

20.png

此时我们就可以发现Demo.java在我们的本地仓库中恢复了。

最后:以上操作我们都是在本地进行的,当然我们也可以在远程操作中使用,这里要特别注意git的存储结构。

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

推荐阅读更多精彩内容

  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,638评论 4 54
  • 《偷影子的人》 | 共读第九天 替你翻书,伴你共读。各位亲爱的读书有方共读书友大家晚上好,今天继续由我带领大家共读...
    读书有方阅读 330评论 0 0
  • 前几天听我一个做销售的朋友说了这么个事:他们公司新来个小姑娘(心里年龄更小点),就叫他小A,小A很活泼很开朗,没有...
    世上本没有路阅读 244评论 3 3