最近在工作中总是涉及到代码的提交,因此经常和git打交道,也经常涉及到git 的分支操作,总结了一些经验。
git 的基本操作方法及实例
1.工作空间、暂存区、本地仓库、远程仓库
我们以提交论文到老师的邮箱的过程为例来解释这些概念。你在word里面对论文进行自由修改,可以直接面对论文的具体内容,这可以理解为工作空间(workspace)。你把这个正在修改的毕业论文放在了电脑桌面上,同时你需要在桌面上再建一个文件夹,里面放你修改好准备提交给老师的毕业论文,在这个文件夹里我们可以暂时保存要发给老师的毕业论文,这个文件夹可以理解为暂存区(staging area),我们不能够对暂存区的文件直接进行修改,修改都是在工作空间进行的。论文写好并且完全修改好之后,最终我们需要发到老师的邮箱,这个邮箱就可以理解为本地仓库(local repository),它里面存着我们已经提交给老师的文件。最终老师也修改好你的论文了,也不会产生变动了,就可以上传到学校的服务器上做备份了,这个用来保存和备份学生论文的服务器就可以理解为远程仓库(remote repository),除了上传论文到服务器外,我们也可以从服务器下载别人的论文到工作空间。
2.使用git例命令的小例子
我用一些常见的git 命令来模拟这个过程:
第一步:新建文件夹gitdemo并交由git 这个工具来管理。
mkdir gitdemo
cd gitdemo
git init
显示如下:
第二步:在文件夹下开始写你的论文file1,并在文件写入一行 this is file1.
touch file1
echo this is file1. >> file1
这个时候工作目录下就有了file1,此时,你觉得你的论文初稿已经写成功了,想要先放在暂存区等明天发给老师,可以使用下面的命令,作用是将工作目录下的文件file1放在暂存区。
git add file1
第三步:第二天早上,你突然发现你的论文少加了一行字,假如就是你的名字,该怎么做呢?你可以在工作目录下对file1直接修改,再提交到暂存区。这里介绍两个常用的Git 命令,可以查看工作区和暂存区的文件区别,git diff常常用来确认具体修改了什么;git status可以随时用来查看工作区、暂存区、本地仓库的状态。
echo author:Andy. >>file1
git diff
git status
我来按行来解释一下git diff 上显示的含义
//第一行:a表示修改前的文件,b表示修改后的文件
//第二行:index 后有两个数字,分别表示修改前后文件的哈希值;最后的数字表示文件属性,例如644即〔当前用户〕读写权限,〔群组用户〕读权限,〔其它〕读权限,100表示(当前用户〕可执行权限,
//第三四行:---表示修改前的文件,+++表示修改后的文件
//第五行:一般为四个数字,假设形式为:@@ -a,b +c,d @@,含义是修改前文件从第a行开始显示,一共显示b行,修改后的文件,从第c行开始显示,一共显示d行,只显示一行,即b或者d等于1时,会审略写1。
//下面的内容就是修改前后的文件显示,修改前后相同的部分为白色,增加的部分会以+开头,颜色为绿色,减少的部分以-开头,颜色为红色。
再解释一下git status输出含义
//on branch master,下一行输出提交的master 分支上情况
//还会显示暂存区/工作区的文件是否已经提交,一般分为changes to be commited,表示当前在暂存区的文件,changes not staged for commmit,还未放入暂存区,此时位于工作区的文件
//注意颜色的显示往往表示不同的含义,新增加的文件是绿色的,修改后的文件是红色的
现在把改好的文件添加到暂存区,再查看一下状态,会发现输出有了变化,此时工作区的文件和暂存区已经更新一致了,一次git diff 没有输出,git status 会显示暂存区有一个新文件需要提交(changes to be commited)。
git add file1
git diff
git status
第四步:你觉得加上名字后的论文已经不需要再修改了,你决定发给老师,git 要求你提交论文时不能干巴巴只放个文件,需要加描述的文字来简单描述一下你的提交,假设你就想说这是第一次提交。这时,file1就被提交到本地仓库(local repository)上去了,你的老师就可以帮你修改你的论文了。
git commit -m "this is first time commit."
git status
如果你提交上去了,但觉得自己提交时的描述需要改一改,你还可以用下面的命令来修改你提交的描述文字。
git commit --amend
大功告成,回去睡觉了。
第五步:你的老师看了你的论文,发现你没写指导导师的名字,需要加上他的名字。于是你接收到了命令,赶紧在工作空间上对file1进行修改,加上导师名字,并提交了上去。
echo superviser:Jay. >>file1
git add file1
git commit -m "this is second time commit"
git status
第六步:刚刚提交上去,你定睛一看,把老师的名字写错了,你的老师叫Jack,你写成了Jay,怎么办?可千万不能让老师看到这笔提交,于是你赶紧撤回刚刚的提交记录,怎么撤回呢?
首先输入git log,这个命令可以用来查看你的提交记录,那一串长长的数字就是你的提交ID,越是上面的ID表示越近的提交,你想把刚刚提交说明是“this is second time commit”的那条提交给撤回,可以使用命令git reset commit_ID撤销上一比提交,需要回退到哪一个commit当时的状态,commit_ID就输入那一笔提交的ID号。大功告成,回去睡觉!
git log
git reset <commit_id>
echo superviser:Jack. >>file1
git add
git commit -m "this is revised sencond time commit"
第七步:
你的老师对你的论文很满意,加上了他的名字,他现在需要把这边论文上传到学校保存所有毕业生论文的网站上,
3.总结一下常见命令及含义
git命令 | 含义 |
---|---|
git add filename | 把工作区的文件filename添加到暂存区 |
git add . | 把工作区的所有文件添加到暂存区 |
git commit -m “commit_description” | 把暂存区的文件添加到本地仓库,并加上提交描述commit_description |
git commit --amend | 修改上次提交的提交描述 |
git reset commitID | 回退到commitID时的提交状态 |
git log | 查看提交记录 |
git diff | 比较工作区和暂存区的区别 |
git status | 查看工作区、暂存区、本地仓库的状态 |
vim的操作小节
在git 修改文件的过程中,我们常常需要用到vim这个工具进行文本的编辑,尤其是在手动修改代码的过程中,利用好这个工具能够事半功倍。虽然也不难,但是熟练使用需要一个记忆。