新入公司,发现公司用的是Git进行代码管理,以前所呆的公司都是用的SVN,对于Git也不是完全不了解,之前多多少少了解过,但是毕竟没有用做实际开发中,所以理解的也不深入,命令也没有去学,只弄了一下eclipse中git的team管理操作,也没有自己总结过,如今再次捡起来,所以重新总结一下,方便自己以后忘记了再来回顾吧。
首先是Git这个东西,不管你是百度还是google,基本所有人都会说Git比SVN强大,比SVN好用,原因在哪里了,Git是分布式版本控制系统,SVN是集中式版本控制系统,最能体现出区别的是,假如你公司SVN服务器挂掉了,那么你就可以放假了。
前面几步就省略了,重点是几个选项界面:一般情况下,这个两个界面都选第一个。
在“Configuring the line ending conversions”选项中,
第一个选项:如果是跨平台项目,在windows系统安装,选择;
第二个选项:如果是跨平台项目,在Unix系统安装,选择;
第三个选项:非跨平台项目,选择。
安装完成之后,就需要为你的Git配置账户了,Git是以邮箱和用户名这个组合为一个标识的。打开Git Bash
git config --global user.name 'zhangsan' //配置全局用户名
git config --global user.email '[email protected]' //配置全局邮箱
这里配置的是全局的用户名和邮箱,也可以为每一个项目配置一个,这里就不演示了。
在C:\Users\Administrator.gitconfig中可以看到配置的用户信息。
Tip:在Git Bash中可以使用linux命令来操作windows,比如用touch创建文件,vi编辑文件等等。
我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用“git add”把文件纳入Git管理,实际是把本地文件修改添加到暂存区;
第二步是用“git commit”提交更改,实际上就是把暂存区的所有内容提交到当前分支 。
git init // 初始化/创建版本库
这里可以发现,创建版本库成功,路径下面多了一个.git的文件夹,这个就是git的本地版本库,并且自动为我们创建了master分支,并且当前已经关联上了master分支。
git status // 查看当前路径下所有文件的状态
git status a.txt // 查看当前路径下a.txt文件的状态
可以看到,On branch master 在master分支上,untracked(未被git跟踪的文件),请使用git add命令来添加将要提交的文件,注意到,这里的文件名字显示为红色,表示未被git管理的文件。
git add a.txt // 将a.txt加入到暂存区
由于使用的是git status命令,是查看该路径所有的文件状态,所以b.txt也是untracked file,没被git管理跟踪,所以是红色的,另外刚刚将a.txt加入到了暂存区,可以看到a.txt是绿色的,当然new file表示是新文件。
git commit -m 'new file to local' a.txt // -m 'xxx' 是提交的注释,必须要,否则提交不了。
不加注释的情况,这里省略了点击之后很长的提示信息。
加注释
这里可以看到,提交成功,a.txt文件的状态为
nothing to commit,working directory clean(没有什么可以提交,工作区非常干净)
我这里修改a.txt,添加一段话111111,查看状态,有新提示,因为这个文件已经处于git管理跟踪了,提示使用checkout来丢弃之前的修改操作。(之后演示),这里不讨论这个,继续添加到暂存区
这里同样是显示绿色,当然不再是显示new file ,而是modified,继续提交
git log // 查看当前路径下所有文件的版本日志信息
git log a.txt // 查看当前路径下a.txt的版本日志信息
显示作者,时间,注释
git log --pretty=oneline a.txt // 查看a.txt的日志信息,以一行一行显示
git reflog a.txt
git reset --hard HEAD^ // 回退上一个版本
git reset --hard HEAD~40 // 回退40个版本以前
git reset --hard 版本号(如上面的fbf510a) // 穿梭到fbf510a那个版本
成功回退到前一个版本!
git diff a.txt
注意这里是修改a.txt之后没有add到暂存区,然后使用diff对比工作区与本地版本库
git checkout -- a.txt
git reset HEAD a.txt // 先回到之前版本库a.txt的代码
git checkout -- a.txt // 再checkout a.txt
git reset –hard HEAD^ // 整体回退到之前版本
git rm -f a.txt // 删除a.txt
git commit -m 'delete a.txt' a.txt // 提交操作
使用rm删除之后,使用git status命令,可以看到a.txt文件为绿色,需要提交才能生效
git branch 分支名字 (如dev) // 创建(dev)分支
git branch
git checkout 分支名字 // 切换到xx分支
可以看到最后/D/develop/….(dev)
另外值得注意的一点是,创建分支的时候,拷贝了一份master的东西到新分支中。
git merge
现在我修改新分支dev上的a.txt,添加dev update
然后回到主分支,主分支我并没有进行修改,只有新分支修改了,那么进行合并
显然是没有冲突的,master分支里的a.txt进行了更新
现在可以看到,分别将master的分支与dev分支修改成如上所示,那么进行merge的时候,会提示如下,而且没有解决冲突之前不能进行其他操作,比如切换分支等等。
使用vi编辑器去编辑a.txt
修改,删除<<<< HEAD >>>dev 什么的之后,保存,提交之后MERGING状态消失,冲突解决。
git branch -d dev
小结一下:只能说,总结这个东西确实有点累,主要是CSDN不支持直接粘贴复制图片,每个图片要一个个上传,确实有点蛋疼,不过弄了这么久,终于是搞好了,不过还是有很多地方不足,之后总结下关联github之类的内容,另外把常见基本命令专门开一篇出来,如果要查命令的话,看那篇就够了,这个只是入门级的。