首页 > 技术文章 > 关于git的用法

qingcui277 2018-09-29 17:47 原文

一,安装git

  下载地址 https://git-scm.com/download/win

二,如何使用git

  (1)首先你要点进去https://github.com/这个网站,注册一个github账号。注册好之后,要记住邮箱和密码

  (2)打开之前的那个图标就是这样一个窗口,首先Git是分布式版本控制系统,所以需要填写用户名和邮箱作为一个标识,分别输入这两个命令,用户名和邮箱需要换成自己的。

  $ git config --global user.name "ycbou"

  $ git config --global user.email "qiyincui77@163.com"

  (3)  打开之前的那个图标就是这样一个窗口。现在比如我在我的C:/wamp/www/aaa有一个项目,我要对它进行管理怎么办呢。直接在控制台里面输入  cd   c:/wamp/www/aaa  之后你就会在aaa这个目录里面了。那如何对它进行管理呢。直接在控制台输入git  init

之后去查看aaa目里会多了个.git 的文件夹,如果看不见也没事,因为隐藏文件不可见

   下面去新增一些文件,随便输入些内容,然后再git里面输入 git status。会发现添加的文件名是红色的

红色说明文件做了修改但是还没保存到本地仓库,我们紧接着执行 git add . 再敲git status 发现刚才的红色文件名变成绿色的了,

我们继续敲 git commit -m "做修改"

敲完之后,使用git status 发现上面说工作区很干净。没有文件要被提交

三,git原理

git 分为工作区、暂存区、本地仓库

工作区:你现在编辑器所处的那个工程里面,

git status 是状态查看,查看你工作区和暂存区有没有文件被提交到本地仓库,如果有工作区未向暂存区保存就显示红色

如果有暂存区没有提交到本地仓库就绿色

什么是本地仓库呢,就是一开始说的那个不可见的文件,你一执行git init就会有一个本地仓库出来

如果从工作区把文件提交到暂存区呢?就是使用 git add . .代表所有,也可以写成 git add index.html 【index.html】

就是你做了变动的文件名  git add .  就是把文件从暂存区提交到本地仓库

使用 git commit -m ‘做修改’ 引号里面的内容是自己添加的一个备注, 

在文件里继续添加一段话,再git status 查看当前状态。发现有未向暂存区提交的保存  接着 

git commit -m ‘第二次修改’ 将暂存区文件提交到本地仓库,之后 再用git status 查看,

发现已经没有文件提交;了

四,版本回退

到目前为止,我们向工作区提交了两次修改,git 给我们提供了一个git log可以查看最近的提交历史

如果觉得很乱可以使用 git log --pretty=oneline

可以看出我们的两次提交,前面那串黄色的就是我们的版本号,现在要回到我原先的版本怎么办

可以使用git reset --hard HEAD^ 这个命令回退到上一个版本

回到上上个版本,可以使用命令 git reset --hard HEAD^^ 

我们也可以同给某个版本号回退到相应版本

git reset --hard 【版本号】

如果我现在又发现原来新版本的解决方法了,我又想回到新版本上去怎么办呢?

现在用git log 已经不能看到新版本的版本号了,只能采用新命令了  叫git reflog 来查看命令历史

使用git reset --hard 【版本号】回到最新版本

现在接着往下进行,在index.html 接着添加一行

后来发现这句话不慎和是,这个时候可以直接删除,然后git add . 就好了。

但是也可以通过git checkout -- index.html .此时前面那句话没有了,这种情况适用于我们没有git add到暂存区之气an

如果我们已经git add到暂存区了,怎么撤销修改呢 我们可以使用git reset HEAD index.html 先撤销暂存区的修改

然后我们可以通过命令git diff查看暂存区和工作区有什么不同,之后我们可以通过git checkout --index.html

发现已经修改好了,但是万一我们已经提交到仓库里,那就是上面说的版本回退了

五、删除文件

新建一个test.txt  git add tsxt.txt 已经 git commit -m "xxx"

现在如果要删了,通过git status 发现工作区和本地库已经不一样了,

如果确实要删除 就 git rm test.txt 之后再git commit -m 'remove'

如果删除错了,还原回来的话 用 git checkout -- test.txt

 六、远程仓库

首先你要点进去https://github.com/这个网站,登录你刚才注册的github账号。

ssh-keygen -t rsa -C youremail@example.com

把这个邮箱替换成自己的

之后一路回车,如果一切顺利的话你去你的C盘下去找你的user文件夹,有的叫用户,你在里面搜索一下有没有一个.ssh的文件夹,把它打开之后,里面有这几个文件

之后接着打开那个https://github.com/网站,登录进去。

 点击右边这个绿色的图表,点开下拉框之后里面有个setting。

打开之后随便写入一个title,然后打开你刚才找到的再C盘里的那个id_rsa.pub.把里面的内容复制到那个key里面去,之后点击添加即可。

之后回到一开始的这个页面,

点击中间的那个加号

   选择第一个,这就相当于你自己在远程建了一个仓库。

点击之后,会出来这样一个页面。现在我们在那个名字哪里写上aaa,直接点击创建就好。

目前,在GitHub上的这个learngit仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。

     现在,我们根据GitHub的提示,在本地的aaa仓库下运行命令:

$ git remote add origin git@github.com:BrouceLee/aaa.git

请千万注意,把上面的BrouceLee替换成你自己的GitHub账户名,否则,你在本地关联的就是我的远程库。

添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

接着执行命令git push -u origin master

执行完之后,我们发现我们的远程库和本地仓库已经同步了。

从现在起,只要本地作了提交,就可以通过命令:

$ git push origin master

把本地master分支的最新修改推送至GitHub,现在,你就拥有了真正的分布式版本库!

七、从远程库克隆

上次我们讲了先有本地库,后有远程库的时候,如何关联远程库。

现在,假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆。

首先,登陆GitHub,创建一个新的仓库,名字叫gitskills:

我们勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。创建完毕后,可以看到README.md文件:

现在,远程库已经准备好了,下一步是用命令git clone克隆一个本地库:

我们在想要创建项目的地方执行下面的命令

git clone git@github.com:BrouceLee/gitskills.git

     现在去你你想要建工程的地方开始,就可以发现大体上已经建好了。

(8)分支管理

      分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。

     现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。

首先我来创建一个分支

执行命令git checkout -b dev 这样就创建好了一个dev分支。

我们来介绍一下,最开始的时候我们的所有操作都是默认在一个叫做master的分支上操作的,包括提交到远程库,等等。关联远程库的时候也是从远程关联master分支。当我们用dev这个分支写完一个项目之后,我们要把这个分支所做的工作向master分支进行靠拢.

我们现在可以通过命令git branch来查看一下所有的分支。

git branch命令会列出所有分支,当前分支前面会标一个*号。

然后,我们就可以在dev分支上正常提交,比如对index.html做个修改,加上一行

 然后我们执行git add index.html以及 git commit –m “use the dev first”

现在我dev的分支工作已经做完,现在我可以切换回master分支。利用命令

git  checkout master

       切换回master分支之后,我们发现index.html里面我们新加的那句话不在了。因为我们刚才是在dev分支上做的提交。现在我们要把分支合到master上,就利用命令 git merge dev就可以了,此时再去查看index.html发现我们在dev里面做的操作已经在master里面了。现在我们可以使用命令git branch –d dev来删除dev这个分支,之后再使用git branch来查看分支发现只有master一个分支了。因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。

三、解决冲突

现在我们考虑这样一种情况,我们新建了一个分支feature1,利用feature1来进行把index.html里面再加一行,首先切换到feature1这个分支,然后修改index.html,之后提交。

 

 

     然后我们切换回master分支,现在我们在master里的index.html里面加一句话,之后进行提交。之后我们按照刚才的那种方式合并两个分支。git merge feature1会发现有冲突出现

 

 

此时应该怎么解决呢,此时必须手动解决冲突。

 

四.分支策略

在实际开发中,我们应该按照几个基本原则进行分支管理:

首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

所以,团队合作的分支看起来就像这样:

 

最后推荐一个详细的分工合作的网站,一定要看。https://segmentfault.com/a/1190000002413519#articleHeader2

 https://www.cnblogs.com/my-freedom/p/5701427.html

推荐阅读