Git的基本使用

来源:互联网 发布:戛纳电影节 知乎 编辑:程序博客网 时间:2024/05/22 12:48
Git 的基本使用
在Ubuntu环境下,执行命令:sudo apt-get install git进行git的安装。
然后你需要配置你的git的用户名和email地址:
1.git config --global user.name "your username"
2.git config --global user.email "youe email"
然后你需要创建一个文件夹来作为git的仓库进行使用:sudo mkdir gitFolder
在这个文件夹中输入命令git init来把这个目录变成git可以管理的目录(然后你会发现里面多了一个.git文件,这个目录是Git来跟踪管理版本库的,如不必须,请勿修改)
执行命令git add readme.txt (readme.txt是你将要上传的文件名)把要上传的文件先预先准备好
执行命令git commit -m "修改的内容信息" ,把文件进行正式的提交,在commit命令执行之前,你可以执行多次的git add命令,然后统一通过git commit命令进行提交的操作.
使用命令git status来查看git仓库的一些状态。如果你修改了一个文件,但是没有提交的话,都会在这里面展现出来的。
使用命令git diff 可以实时地来查看你修改的文件的内容。基本的步骤还是建议你:每当你需要提交一个文件的时候,先git diff 来查看一下你修改的内容,进行一下确认的操作,然后再执行命令git add来进行上传,然后在执行命令git status来查看你将要上传的文件都有哪些,文件状态都是怎样的,然后再进行git commit的提交操作,最后你可以再次执行git status命令来查看文件的状态。

文件还没有进行commit的status:

图1
文件进行了commit的status:

图2
git会告诉我们目前没有需要提交的文件(注意图1中的第三行,就是告诉我们有文件修改了,但是还没有进行commit的操作)
你不断对文件进行修改,然后不断提交修改到版本库里,就好比玩RPG游戏时,每通过一关就会自动把游戏状态存盘,如果某一关没过去,你还可以选择读取前一关的状态。有些时候,在打Boss之前,你会手动存盘,以便万一打Boss失败了,可以从最近的地方重新开始。Git也是一样,每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失。
我们可以执行命令git log来查看文件的修改历史,产生的提示信息会告诉你修改人,修改时间以及commit之后-m参数后面的提示信息.(如果产生的提示信息过于多行,你可以输入命令git log --pretty=oneline来进行简洁输出)
有时候我们在这个版本的基础上面做出了并不想发生的修改操作,我们可以执行命令:git reset --head HEAD^ 来恢复到上一个版本(版本是一个接一个的,这里只是恢复到上一个版本,并不是恢复到最初的版本)你可以每次都输入HEAD^来恢复到上一个版本,如果你要恢复之前的倒数第二个版本你可以替换为HEAD^^,你如果需要恢复到倒数第100个版本,可以输入命令HEAD~100,但是并不经常用到。
你的版本信息:

图3
你目前就在最上面的那个状态,你执行过命令git reset --head HEAD^之后,你应该就在从上面数的第二个版本了:

图4
再次执行命令git reset --head HEAD^,你就会在从上面数的第三个版本了,也就是最初的那个版本:

图5
版本后退之后,将要介绍的是版本前进,就是说如果你后退的版本过多了,想前进一个版本的操作:首先你需要保证你的终端还没有关闭,因为这一步需要前面版本的commit id,执行命令git reset --hard 6a0edde 就会前进到图3中从上面数的第二版本了,所谓的commit id 就是那个经过SHA1机密后的数字,命令里面你不需要全部写出,你只需要写出前几位就可以了,在这里我写了7位。命令执行之后,你就会前进到这个版本了。
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL:

图6
但是针对于上面的那一种情况,如果你把终端关闭了之后,你还是有办法进行版本的前进的。执行命令:git reflog 你就可以查看到每次你执行的命令。当然也包括了你执行commit命令之后生成的commit id:

图7
接下来要掌握的内容是撤销操作,第一种情况:如果你在本地文件库中进行了修改之后,发现所修改的内容越来越不是你想要的内容了,你可以执行命令:git checkout -- readme.txt 来恢复内容和git版本库中的最新的一个版本的内容保持一致。第二种情况:你已经将一个修改完的文件放到了暂存区里面了,但是你之后又在本地文件库中的这个文件中进行了一个修改的操作。但是这个修改的操作又是你并不想发生的了,你可以继续执行命令git checkout -- readme.txt来恢复内容和暂存区里面文件的内容保持一致。(这个命令是针对于本地的不期望的修改)
如果你在本地文件库中修了一些内容但是并不是你想修改的,但是现在已经添加到了暂存区中去了,你可以执行命令git reset HEAD readme.txt 来进行撤销的操作(当命令中使用到了HEAD,就代表着使用到了最新的版本文件),命令执行过后,你就会发现暂存区里面的文件已经不见了,就算你再次执行命令git commit也不会有文件进行提交了。(这个命令是针对于暂存区里面的文件的不期望修改)
接下来要掌握的内容是关于删除文件的操作:你在本地文件库中创建了一个文件,并且提交到了git版本库里面去了,但是你接下来在本地文件库中删除了这个文件,执行命令git status之后会提示你删除了一个文件,但是要求的是你的本地文件库和git版本库中的文件数量上起码是一样的,所以接下来你有两种选择,也是针对于你的不同要求:第一种情况,你确实想删除这个文件,执行命令:git rm text.txt ,然后执行命令git commit -m "提示信息",就可以在git版本库进行文件的删除操作。第二种情况就是你不小心删除了这个文件,执行命令:git checkout -- text.txt 执行完毕之后你就可以把这个文件从git版本库中恢复过来了.

============================================================
====到目前为止,你可以基本掌握了单机节点的git使用了,但在实际的====
====开发过程中,是不会使用这么无聊的功能的,当然会在多台机器上====
====面配置git,基本的情况一般会是有一台电脑作为服务器,24小时会====
====进行开机使用,其他的机器会基于这台服务器上传或者下载一些文====
==== 件,接下来就要进行这些的介绍了。 ====
=============================================================

RSA:
在这里先介绍github的使用,这个网站就是个远程的git仓库,所以我们可以使用它来模拟远程的服务器。但是本地的git版本仓库和远程的git仓库是通过ssh加密协议进行传输的。首先在你的linux主用户文件目录下面执行命令:ssh-keygen -t rsa -C "youremail@example.com" 来创建你的SSH key。之后系统会创建一个.ssh目录出来,里面包括了两个文件,一个id_rsa文件(私钥文件),一个id_rsa.pub(公钥文件).
然后你需要把你的公钥内容拷贝到github网站里面(用户设置-->add SSH Key),然后你再上传文件到github就可以进行身份检验了。
之后你可以在github 网站上面新创建一个repositories(贮藏室):

图8
然后你需要执行命令:$ git remote add origin git@github.com:RaeHowe/FirstGithub.git (其中RaeHowe是你的github网站的用户名,FirstGithub是你在github网站上面建立的repo的名称)关联到远程库。添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。
这个仓库就会作为你的远程服务器来进行使用了。然后你在本地提交文件之后,你可以执行命令:git push -u origin master进行第一次提交文件到远程服务器的操作。由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。所以在以后你如果要提交文件到远程库的话,你只要执行命令git push origin master 就可以了。

接下来你需要掌握的内容是git的分支管理方法。
执行命令:git checkout -b dev 来创建并且切换到dev这个新的分支上面。这行命令相当于下面的两个命令的结合:1.git branch dev 2.git checkout dev 。执行命令:git branch来查看你目前在哪个分支上面并且可以知道一共都有哪些分支。测试点有意思的东西:现在你切换到dev这个分支下面修改并且提交一个文件,然后再切换回master分支上面,查看你刚刚修改的那个文件,你会发现刚刚作出的修改并没有在这里发生变化。原因就是你在那个分支上面作出的修改并不会在这个分支以外的分支上面体现出来。现在,我们先切换到分支master上面,然后执行命令:git merge dev ,这个命令就是说你要把dev分支合并到这个master分支上面了。然后你再去查看刚刚修改的那个文件,你会发现作出的修改已经体现出来了。执行命令:git branch -d dev ,删除dev这个分支。这样的好处的就是操作更安全了,就相当于你创建了一个副本,在副本上面作出相应的修改,等到你确定修改完毕之后,再进行合并的操作。当分支与master发生冲突的时候,基本上遇到的情况就是你即在dev分支中修改了一个文件(text.txt)也在主分支master中修改了这个文件(text.txt),然后就会产生冲突了。解决的方法就是当你执行完合并分支的命令:git merge dev之后,就会出现错误了,然后你去查看那个出现冲突的文件,会发现里面有:<<<<<<<<<< ,===========,>>>>>>>>>>>的标记,这就说明你的这个分支和其他的分支在这一块发生了冲突,需要修改。修改完毕之后,再次进行提交的命令就可以了。执行命令:git log --graph可以查看分支合并树。
分支策略
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
所以,团队合作的分支看起来就像这样:

图9

额外内容:当你在开发你的部分功能中,开发到一半的时候,有人告诉你,你的其他功能出现bug了,需要去修改。但是你在你的分支上还不能进行提交的操作,因为你还没有开发完毕,这时候你可以执行命令:git stash 可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作。使用命令: git stash list 可以查看储存起来的状态都有哪些。使用命令git stash pop来取出这个储存起来的工作状态。当然你也可以多次stash,恢复的时候,先用git stash list查看都有哪些工作状态储存了起来,然后恢复指定的stash,用命令:$ git stash apply stash@{0}
如果你创建了一个分支,但是还没有进行和主分支进行合并的操作,然后假如你要删除这个分支的话,需要执行命令:git branch -D dev 参数-D就是强制进行删除分支的操作。
执行命令:git remote来查看远程git库的信息。使用命令git remote -v来查看更相信的信息。

图10
推送分支的时候,推送master分支就执行:git push origin master,推送dev分支就执行git push origin dev,开发的时候,一般推送主分支:master和开发分支:dev

=====================================================
错误剖析
=====================================================
当你的项目组人员改动了某一个文件,并且已经进行了上传的操作。接下来的这个时候,你也改动了这个文件,并且要提交的时候,就会出现错误:

图11
错误提示会告诉你说,你应该先把在远程git库中的文件下载下来进行合并,在进行上传的操作。执行:git pull 进行文件的下载。如果你是在dev分支中进行下载的话,有时候还是会报错的:

图12
git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接:

图13

图14
======================================================================================================

接下来你需要掌握的内容是git中的打标签。执行:git tag v1.0你就可以打个标签了。执行:git tag可以查看当前的标签名。(注意:默认标签是打在最新提交的commit上的)如果有情况:你之前有一个commit操作,但是你没有打标签,你在过后突然想起来需要打标签,你可以执行:git log --pretty=oneline --abbrev-commit 这个命令可以查看到历史的commit id ,比如:

图15
然后执行:git tag v0.0 9b5cf50 就相当于给第一个commit操作打上了一个标签
执行:git show v0.0 就可以直接查看到v0.0那个版本的commit信息了。

图16
接下里你需要掌握标签的删除,执行:git tag -d v1.0 就会把v1.0这个标签删除掉了。需要知道的是,标签都是存储在本地的,并不会自动发送到远程的git上面,如果你需要也将标签进行远程发送的话,你可以执行命令:git push origin v1.0 或者将本地的所有标签一次性全部发送到远程git上面,执行:git push origin --tags 如果你想要删除远程git上面的一个标签的话,你需要的步骤是:1.执行:git tag -d v1.0 2.执行:git push origin :refs/tags/v1.0 运行的结果可以去github网站上面查看到。

=====================================================
==== 扩充 ====
=====================================================

在GitHub出现以前,开源项目开源容易,但让广大人民群众参与进来比较困难,因为要参与,就要提交代码,而给每个想提交代码的群众都开一个账号那是不现实的,因此,群众也仅限于报个bug,即使能改掉bug,也只能把diff文件用邮件发过去,很不方便。
但是在GitHub上,利用Git极其强大的克隆和分支功能,广大人民群众真正可以第一次自由参与各种开源项目了。
如何参与一个开源项目呢?比如人气极高的bootstrap项目,这是一个非常强大的CSS框架,你可以访问它的项目主页https://github.com/twbs/bootstrap,点“Fork”就在自己的账号下克隆了一个bootstrap仓库,然后,从自己的账号下clone:
git clone git@github.com:RaeHowe/bootstrap.git

感谢学习.

0 0
原创粉丝点击