一、安装git

1.安装git,一直默认安装就好,安装位置自己选择,不建议安装在C盘(请根据自己的系统下载对应的版本)
git下载地址:https://git-scm.com/downloads
2.安装好检查是否安装成功,随便那个文件夹下,鼠标右键,选中Git Bash here,然后出来一个控制台,类似Linux系统。

输入 git --version,有版本信息就表示你已经安装成功
在这里插入图片描述
在这里插入图片描述

二、常用git命令(请拷贝一份然后跟着下面的教程走,下面的教程只有图片,没有代码)

1.添加身份认证,这个身份认证就是你提交的身份

        git config --global user.name "xxx"  (定义全局变量user.name)
        git config --global user.email "xxx@xx.com"   (定义全局变量user.email)

2.查看变量

        git config user.name   (查看变量user.name)
3.创建初始化版本库(初始化后会生成一个.git文件隐藏文件,这个文件就是git管理项目的配置文件,不要动它)
        git init               
4.查看文件状态,是否修改/是否可提交.......(下面有一张图对各个状态的讲解)

        git status      (正常格式查看文件状态)

        git status -s  (以缩写形式查看文件状态)

5.将文件加入版本管理

        git add 1.java  (加入指定文件)

        git add .   (将所有未加入版本管理的文件全都加入管理,注意add空格后有一点)
6.查看commit版本日志

        git log  (查看commit的详细日志,包括commit时间、commit信息、commit的用户、commit邮箱等等)

        git log --oneline  (分行查看commit日志,只包含commit信息、commit的id)

         git log --oneline  --graph (以图形方式分行查看commit日志,可以查看到多个分支的形状,何时分叉、何时合并。。。。。)
7.commit修改

         git commit -m "change 1"   (将所有处于Staged的状态的文件commit到本地仓库,commit信息是"change 1")

         git commit -am "commit之前会自动add"  (将所有处于Unstaged的文件commit到本地仓库,commit之前会自动add,commit信息是"commit之前会自动add")

        git commit --amend --no-edit         (将当前修改commit到上一次commit的版本中,不修改提交信息,但是commit的id会修改)
9.查看文件与最近一次的不同

         git diff(当前处于unstaged状态,查看文件与最近一次commit的不同)

         git diff --cached (当前处于staged状态,查看文件与最近一次commit的不同)

         git diff HEAD (当staged与unstaged同时存在时,可以同时查看文件与最近一次commit的不同)
13.回到从前(整个文件夹版本的跳转)
         git reset 1.java   文件处于staged状态,将文件1.java从staged状态变成上一次unstaged
         git reset --hard HEAD^^^^(~1/2/3)       将文件夹版本跳到上几次的commit的版本(一个^代表1次,~后面跟的数字代表次数)
         git reset --hard commitId            (commitId是commit的版本号,跳到指定commit版本) 
         git reflog             (查看HEAD指针移动的记录)
14.单个文件commit版本的跳转
         git checkout commitId -- 1.java         (将文件1.java跳回到指定commit版本,但是不影响其他文件。举个栗子:你穿越回到你小时候,你身体发生变化,手变小了。。。。但是你现在的家人与小时候的家人是相互独立,就是说你的改变并不影响他们的独立。。。。。额额额,好像也不好理解,算了算了。。。)
15.分支branch(分支与分支之间是独立的,就是把项目拷贝了多份,你在不同分支开发项目是互不影响的)
         git branch dev 创建分支dev,但是不切换分支

         git checkout -b dev 创建分支并切换到分支dev

         git branch 查看所有分支

         git checkout dev 跳到分支dev

         git branch -d dev 删除分支dev,只有主分支master才能删除分支

         git checkout -D dev 强制删除分支dev

         git branch -r  查看远程分支

         git checkout -b 本地分支 origin/远程分支     创建本地分支并关联

16.merger(合并分支)

         git merge dev  (将分支dev合并到当前分支,没有合并信息)
         git merge --no-ff -m "keep merge info" dev    (将分支dev合并到当前分支,并带有合并信息)
17.rebase (合并,不过很危险,不建议使用)
         git rebase dev (将分支dev的修改插入到当前分支分离出分支dev的地方中,后面再接上当前分支的修改)
         git rebase --continue (继续rebase)
         git rebae --skip  (忽略rebase)
         git rebase --abort  (放弃rebase)
18.stash(临时修改,适合有些时候不想commit但又想保存)
         git stash (将当前修改保存到临时空间)
         git stash pop (从临时空间取出未提交的修改)
19.将项目推到GitHub(码云也是类似)
         git remote add origin https://github.com/Z-Monkey/test.git   (添加推送仓库地址)
         git remote rm origin (删除推送仓库地址)
         git remote -v (查看当前origin)
         git push -u origin master  (将分支master推到github上)

20.从GitHub上clone项目到本地
         git clone 仓库地址 (clone整个版本库到本地)
         git clone -b 分支名 仓库地址 (clone某个分支到本地)

21.从GitHub上将最新项目拉到本地并于本地的项目进行合并
         git pull origin master   (将GitHub上的master主分支合并到当前分支)

22.出现fatal: refusing to merge unrelated histories的错误时

         git pull origin master --allow-unrelated-histories (合并两个独立仓库的无关的历史)

三、对项目进行版本控制管理(常用命令已经在上面给出,请看图复制)

1.打开你的项目文件夹,鼠标右键选中 Git Bash here

2.设置身份认证信息,作为commit的根据(必须设置,不设置后面的步骤用不了。不过名字和邮箱可以随便设置,虚构的也可以)

3.初始化版本控制——git init(执行该指令后会生成一个.git文件,代表该项目可以由git进行版本控制,这个文件不要动它)

用ls -a可以查看到隐藏文件.git

4.上面步骤完成后就表示你的项目已经可以由git进行版本控制管理了,在管理之前先理清下面这张图的关系(理清了后面就很简单)

先讲解一下各状态:

Untracked:文件未被添加到版本库中会处于Untracked(通常新创建的文件都处于Untracked)

Unmodified:已经被添加到版本库中,对其进行修改后文件处于Unmodfied

Modified:文件已经添加到版本库,并且修改文件后使用git add 文件名

Staged:可以commit的状态,前面几个状态执行git add 文件名 后进入Staged状态

Unmodified、Modified可以看成一个状态Unstaged,Untracked和Unstaged状态执行 git add 文件名 后文件会进入Staged状态,此时才可以commit(提交)保存到本地仓库

Untracked(未进行版本管理状态且不可提交状态)
Unstaged (Unmodifed、Modified 不可提交状态)
Staged(可提交状态)

5.查看当前项目文件的状态(后面我都使用缩写的形式查看:红色??表示Untracked,红色的M代表Unmodified,绿色的M和绿色的A代表文件已经加入Staged,没有信息表示没有修改、没有新添加的文件,处于staged的文件也已经commit):

查看详细状态:

以缩写的形式查看状态:

6.将项目文件全部加入到版本管理中,然后再查看状态,你会发现文件从Untracked变成Staged:

7.将处于Staged状态的文件commit,commit信息是"hello git":

8.查看commit版本信息,你会发现刚刚提交的信息hello git,表示已经commit保存到本地仓库了(后面我都是使用git log --oneline,比较简洁)

9.修改项目代码并将新的修改保存到本地仓库

修改index.jsp文件后查看状态,你会发现index.jsp文件处于Unmodified状态

将index.jsp 加入到Staged状态:

提交文件到本地仓库保存并查看commit版本信息,commit信息是“修改index.jsp文件”:

10.查看文件与上一次commit版本的不同:

先往index.jsp中添加一点信息:

查看项目文件状态,index.jsp文件处于Unstaged状态:

文件当前处于unstaged状态,查看文件与最近一次commit的不同,绿色的+表示刚修改的,红色的-表示上一次commit的

将项目文件add到Staged状态,并查看当前状态,你会发现处于Staged状态:

 文件当前处于staged状态,查看文件与最近一次commit的不同 :

 对项目增加文件User类,并查看当前状态:

编辑index.jsp文件

查看当前状态,你会发现当前状态处于Unstaged与Staged并存:

当staged与unstaged同时存在时,可以同时查看文件与最近一次commit的不同

将上面的修改commit保存到本地仓库:

12.回到过去reset(在不同commit版本间转换)

回到上一个commit版本,你会发现只剩下两个commit版本,再查看项目代码,又回到了上一个commit版本的代码:

回到指定的commit版本,这时候我们就要用到commit的id:

箭头所指就是对应commit版本的id:

根据commit的id回到指定版本,我回到hello git那个版本,我们再去看看项目代码:

看到这里,也许你会问,如果反悔了,不想回到过去,想重新回到未来怎么办,git log --oneline又只能看到过去的版本信息:

我们先查看HEAD指针移动的记录,这个可以看到你版本跳转变换记录,于是你就可以获取未来的commit版本的ID:

好,那现在我们回到未来"查看不同状态下文件与上一次commit版本的不同"那个版本:

于是,我们又回到未来。这时我们再看看项目代码:

13.回到过去checkout(这对单个文件的版本变化)

先创建User类:

将新增加的User类commit到本地仓库保存:

修改User类,增加address属性:

将User类的修改保存到本地仓库:

再修改index.jsp文件,增加<p>测试单个文件版本条状</p>:

将User回到没有address的版本:

再查看项目代码,你会发现User类回到没有addres属性的版本,而index.jsp并不受影响:

14.分支branch(分支的作用:git开发过程中各个分支的作用简单分析 - 简书)

14.1.创建分支并查看所有分支(创建分支有两种方法都可以,任君选择):

       14.1.1.你会看到多列一个分支dev(dev此时与master的代码是一模一样的,你可以跑去分支dev完成某项功能我开发并测试通过后再将该功能合并到主分支master,关于合并merge后面会说),且当前所在分支是master(即主分支)

          14.1.2.创建分支并跳到刚创建的分支:

14.2.分支之间的切换:

查看当前分支:

接着,我想从分支rel跳到分支dev:

14.3.不同分支进行不同功能的开发,分支dev完成User的set方法,分支rel完成User的get方法,最后将两个分支完成的功能合并到主分支master:

先跳到分支rel开发User的get方法   (你在rel分支开发不会影响其他的分支):

接着我们跑去完成User类的get方法:

将分支rel的修改commit保存到本地仓库:

然后我们跳到分支dev完成User的set方法:

最后,将分支dev和分支rel合并(merge)到主分支master(使用 git log --oneline --graph可以看到所有分支之间的分分合合):

先切换到主分支master,再分别合并分支dev和rel(箭头指的地方就是要合并的分支名):

master合并dev

master合并rel

哦好,发生冲突了。仔细看了一下,原来是dev分支合并到master,而rel是从未合并分支dev的mater分支出来的,所以rel没有dev分支合并到master的代码,造成rel分支合并到master发生冲突。关于冲突,这个在开发中难免会遇到,所以我们需要学会如何处理冲突。

解决冲突:

查看User类,git会提示冲突的代码在哪里,两个红框就是冲突的代码,上面那个是master中的代码,下面是dev要合并到,master的代码

手动修改User类,从而解决冲突:

这样就将冲突解决了,解决冲突相当于一次修改,所以需要add、commit

最后,master分支已经成功合并分支rel和dev代码,下面是master上User的最终代码:

分支dev上的代码还是:

分支rel上的代码还是:

14.4.假设分支rel和dev的任务完成了,所以我们可以删除它,这里我就删除分支rel示范一下

切换到主分支master,然后删除分支rel:

还有另一种删除方法:git checkout -d rel

强制删除:将上面的d换成D即可

14.5.临时修改stash

有时候可以有紧急bug需要你修复,但是你现在在写的功能又不能马上完成,但是你又不想commit,那么你可以临时保存,等修复好bug再来取出临时保存的代码继续开发:

创建Course类:

出现紧急bug,将Course保存到临时空间,项目中的Course消失不见:

创建分支debug进行修复紧急bug:

创建debug并跳到debug分支:

修复bug,index,jsp文件增加<div>我已经修复好紧急bug</div>(我简单的模拟一下,修复bug无非就是一次修改):

分支debug保存代码到本地仓库:

切换到master,将分支debug修复的代码merge到master:

ok,解决完bug可以把分支debug删除:

再将刚刚在master存到临时空间的代码取出来继续开发:

你会发现在项目中Cource又出现了,你又可以接着之前的步骤继续开发Course

14.6.将项目推到GitHub(码云也是差不多)

14.6.1.先申请一个github账户(注册GitHub账户和简单使用:一步步注册GitHub账号及简单使用_JiekeXu的博客-CSDN博客)

登录你的GitHub,创建仓库test:

得到空的仓库,箭头指的就是仓库的地址:

14.6.2.将项目推到GitHub上,复制GitHub上仓库的地址GitHub - acodebird/test

先设置origin,即设置仓库地址(设置一次后面就可以不用设置了,需要更新origin时请先删除再重新设置):

再push主分支master到github(push其他分支只需将master换成对应分支名)

push成功后你就可以在GitHub上看到你的项目了

14.6.3.当你的项目在GitHub上已经存在,那么最后在push之前先进行pull(因为以后开发会有很多人一起开发,可能别人已经将GitHub上的仓库代码进行多次更新,你直接push就会出现冲突,pull就是将GitHub上的代码拉到本地并进行merge)

git pull origin master  (将GitHub上的master主分支的代码拉到本地并于当前分支进行merge)

14.6.4.clone别人的项目到本地(网络不好有可能clone失败,这时你就重新clone):

 git clone 仓库地址 (clone整个版本库到本地)
 git clone -b 分支名 仓库地址 (clone某个分支到本地)

获取clone地址:

clone项目到本地:

clone成功:

到这里,git基本的操作已经学完了——有些地方写得不过形象、详细,请多多包涵。如果,感觉还是不太理解。我推荐去看

Why Git? - Git 版本管理 | 莫烦Python   这个是视频教学,更加详细。up主也很牛逼,讲的特别详细

B站观看地址:视频去哪了呢?_哔哩哔哩_bilibili

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐