Git入门学习记录

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 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Tue Aug 20 15:11:49 2013 +0800

    append GPL

commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Tue Aug 20 14:53:12 2013 +0800

    add distributed

commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Mon Aug 19 17:51:55 2013 +0800

    wrote a readme file

简易版

$ git log --pretty=oneline     #显示提交日志,每次提交的日志只占一行,前面的值是commit id
3628164fb26d48395383f8f31179f24e0882e1e0 append GPL
ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
cb926e7ea50ad11b8f9e909c05226233bf755030 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 GPL
ea34578 HEAD@{2}: commit: add distributed
cb926e7 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
$ ls
README.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,也可以指定其他commit
git 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>  #删除一个远程标签
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值