Git入门学习记录

来源:互联网 发布:英国皇家芭蕾舞团 知乎 编辑:程序博客网 时间:2024/06/05 20:23

git教程来自:廖雪峰的git教程。

教程里面有下载路径,不过这里还是再贴一份吧。(国内镜像)


这里说两句趣谈,当然也是从教程里看到的,真的没想到git的诞生是因为:
开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情况是这样的:Linus(那个写了Linux的男人)花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。


集中式VS分布式
在这里版本控制的意思是:我经常改我写的东西(别人也会改),而且我也不知道这次改了对不对,但是不改就不知道对错,那就很头疼了。万一改错了我得回滚,但是改的次数多了就不知道自己回滚的那一版对不对了,这个时候就出现了版本控制系统了,他可能帮你把每次的修改都记录下来,还可以附加一句话说明你改了什么地方,让你可以随时准确的回滚到你想要的版本。

  • 集中式
    集中式的概念是:代码托管在一台专门的机器上(中央服务器),大家一起修改的时候,都像这台机器提交修改内容,别人想要你的最新的内容,也是去“中央服务器”上更新。这样做带来的问题就是大家都必须联网才能提交和更新,另外就是如果大家的网速差或者“中央服务器”的访问速度很慢,那我们更新内容的时候就得一直等着了,这样会影响效率的。另外一点就是“中央服务器”出了问题,那大家就都没的玩了。
  • 分布式
    和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。

分布式的介绍不是很清楚,我个人觉得关于分布式大家可以看看专门去了解一下分布式的意义。
当然说这些话的目的就是告诉你,git真的很好用


这之后的内容因为博主个人的原因,就只会记录一些git的命令,主要方便自己查阅,如果看到这里的朋友真的想要学习git的话,可以去博客刚开始的链接里学习,讲的非常帮。

创建git仓库

$ git init   #将当前目录作为git仓库,并且当前目录会多一个`.git`的子目录

添加文件到Git仓库:

  1. 使用命令git add <file>,可多次使用,反复提交
  2. 使用命令git commit,提交,完成添加操作
git status         #查看git当前工作区的状态git diff <file>    #查看文件与仓库中的版本有何不同,只能查看未提交但修改了的文件

版本回退

$ git log    #显示从最近到最远的提交日志commit 3628164fb26d48395383f8f31179f24e0882e1e0Author: Michael Liao <askxuefeng@gmail.com>Date:   Tue Aug 20 15:11:49 2013 +0800    append GPLcommit ea34578d5496d7dd233c827ed32a8cd576c5ee85Author: Michael Liao <askxuefeng@gmail.com>Date:   Tue Aug 20 14:53:12 2013 +0800    add distributedcommit cb926e7ea50ad11b8f9e909c05226233bf755030Author: Michael Liao <askxuefeng@gmail.com>Date:   Mon Aug 19 17:51:55 2013 +0800    wrote a readme file

简易版

$ git log --pretty=oneline     #显示提交日志,每次提交的日志只占一行,前面的值是commit id3628164fb26d48395383f8f31179f24e0882e1e0 append GPLea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributedcb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file
$ git reset --hard HEAD^   #回退到上一个版本,上上个版本是HEAD^^,上100个版本是HEAD~100
$ git reflog   #记录每一次的命令ea34578 HEAD@{0}: reset: moving to HEAD^3628164 HEAD@{1}: commit: append GPLea34578 HEAD@{2}: commit: add distributedcb926e7 HEAD@{3}: commit (initial): wrote a readme file

撤销修改

首先介绍一下工作区和暂存区,版本库的概念。

详细介绍:看这里

git工作区版本库介绍

撤销修改的内容

$ git checkout -- file    #把文件在工作区的修改全部撤销,回退到最近一次git add或git commit的版本
$ git reset HEAD file    #撤销文件在暂存区的修改,重新放回工作区

删除

$ git rm file       #从版本库中删除文件$ git commit -m ""  #两步操作一起做,才能让工作区变得干净

Git关联远程库

git关联github仓库:看这里

git remote add origin git@server-name:path/repo-name.git    #关联远程库git push -u origin master      #关联后,第一次推送master分支的所有内容git push origin master         #本地提交后,如果有必要,推送到远程库

从远程库克隆到本地

$ git clone git@github.com:michaelliao/gitskills.git    #拿廖老师的教程做个实例Cloning into 'gitskills'...remote: Counting objects: 3, done.remote: Total 3 (delta 0), reused 0 (delta 0)Receiving objects: 100% (3/3), done.$ cd gitskills$ lsREADME.md

Git分支管理

git branch  #查看分支git branch <name>  #创建分支git checkout <name>   #切换分支git chechout -b <name>   #创建+切换分支git merge <name>    #合并某分支到当前分支git branch -d <name>   #删除指定分支

Git分支冲突

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成git log --graph  #可以查看分支合并图
git merge --no-ff dev  #合并分支(禁用fast forward),可以看出来合并过有新的commit

Bug分支

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

删除分支

开发一个新feature,最好新建一个分支

git branch -D <name>   #强行删除一个分支

多人与远程库的交互操作

  • 查看远程库信息,使用git remote -v
  • 本地新建的分支如果不推送到远程,对其他人就是不可见的;
  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

Git标签

git tag <name>   #新建一个标签,默认是为HEAD,也可以指定其他commitgit tag -a <tagname> -m "blablabla..."  #指定标签信息git tag -s <tagname> -m "blablabla..."  #使用PGP签名git tag    #查看所有标签git push origin <name>  #推送指定本地标签git push origin --tags  #推送所有未推送的本地标签git tag -d <name>       #删除一个本地标签git push origin:refs/tags/<tagname>  #删除一个远程标签
原创粉丝点击