码迷,mamicode.com
首页 > 其他好文 > 详细

git学习总结

时间:2015-05-07 23:24:31      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:

最近学习学习git,总结了一点关于git的使用命令和遇到的问题
众所周知,Git是目前世界上最先进的分布式版本控制系统。下面说下git的使用知识
一、SVN与Git的最主要的区别?
  说起git自然想到SVN,我刚接触到的版本控制工具是SVN,SVN是集中式版本控制系统,版本库是集中放在中央服务器的,干活的时候,先要从中央服务器哪里得到最新的版本,干完活后,需要把自己做完的活推送到中央服务器。中央服务器就好比是一个图库,你要改一本书,必须先从图库借出来,然后回到家自己改,改完了,再放回图库。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就耽误事了。
  Git是分布式版本控制系统,它没有中央服务器的,每个人的电脑就是一个完整的版本库,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
  和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。
Git基本常用命令如下:
二、常用的git命令

--文件目录操作命令

1 mkdir **: 创建一个空目录 **指目录名
2 pwd:      显示当前目录的路径。
3 cat **     查看**文件内容
4 git rm **  删除**文件

--git初始化操作

1 git init   把当前的目录变成可以管理的git仓库,生成隐藏.git文件。
2 git remote add origin https://github.com/git/librarysystem.git  把本地仓库的内容推送到GitHub仓库。
3 git clone git@github.com:michaelliao/gitskills.git   从远程库克隆
4 git add **          把xx文件添加到暂存区去。
5 git commit –m "**"  提交文件 –m 后面的是注释。   

--查看命令

1 git status        查看仓库状态
2 git diff  **      查看XX文件修改了那些内容   
3 git log          查看历史记录
4 git reflog       查看历史记录的版本号id(记录你的每一次命令,不论是否提交)
5 git log --pretty=oneline 如果信息量太多可以进行比较好的列表显示   

--版本回退

1 git reset  –hard HEAD^ 或者 git reset  --hard HEAD~ 回退到上一个版本
2  (如果想回退到80个版本,使用git reset –hard HEAD~80  git reset --hard 版本号)

--分支管理

1 git push –u(第一次要用-u 以后不需要) origin master 把当前master分支推送到远程库
2 git branch           查看当前所有的分支
3 git branch name      创建分支
4 git checkout — **    把XX文件在工作区的修改全部撤销。
5 git checkout –b dev  创建dev分支 并切换到dev分支上
6 git checkout master  切换回master分支
7 git branch –d dev    删除dev分支
8 git merge dev        在当前的分支上合并dev分支
9 git push --set-upstream origin dev 提交修改并创建远程分支dev

--隐藏的文件

1 git stash       把当前的工作隐藏起来 等以后恢复现场后继续工作
2 git stash list  查看所有被隐藏的文件列表
3 git stash apply 恢复被隐藏的文件,但是内容不删除
4 git stash drop  删除文件
5 git stash pop   恢复文件的同时 也删除文件

--查看远程库信息 

1 git remote      查看远程库的信息
2 git remote –v   查看远程库的详细信息


三、常出错误:
1:There is no tracking information for the current branch...
    则说明本地分?支和远程分?支的链接关系没有创建,用命令:
    git branch --set-upstream branch-name origin/branch-name。

2: ![rejected] dev -> dev (non-fast-forward)  ... Updates were rejected because the tip of your current branch
    推送失败,因为远程代码的最新提交和你试图推送的提交有冲突,解决办法也很简单,先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送
    
3:CONFLICT (content): Merge conflict in . . .
    这回git pull成功,但是合并有冲突,需要手动解决,解决的方法和分支管理中的解决冲突一样。解决后,提交,再push:
    
4: You are not currently on a branch, so I cannot use any
   解决办法:git checkout master

5:Your branch is behind ‘origin/master‘ by 1 commit, and can be fast-forwarded.
   上面的显示的意思是,有一个更新还没有反应到本地来,可能是别人往server上提交了一点东西。
   可以使用git pull命令拿这些更新到本地来。

四、经验之谈:
1:git revert 和 git reset的区别
开始感觉两者一样,但是在客户端和命令行窗口操作之后发现大大的不同,看一个例子:我先提交三次1,2,3 id号分别是(15d5f70,a167eb1,8fbfe3f)如下图
技术分享
然后执行版本回退 git reset –hard a167 如图:
技术分享
说明执行git reset –hard ** 版本回退是撤销某次提交,但是此次之后的修改都会被退回到暂存区,因为上面显示有提交(by 1 commit)
同理执行 git revert –hard a167
git revert是用一次新的commit来回滚之前的commit
  在回滚操作上看,效果一样。但是在日后继续merge以前的老版本时有区别。revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
得到结论:git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,
只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。

五、常用修改:
1:避免每次提交都输入用户名和密码
    原因是使用了https方式 puh 在termail里边 输入  git remote -v 可以看到形如一下的返回结果
    origin https://github.com/git/librarysystem.git(fetch)
    origin https://github.com/git/librarysystem.git(push)
    下面把它换成ssh方式的。

1 1. git remote rm origin
2 2. git remote add origin git@github.com:yu/demo.git
3 3. git push origin 

2:.gitignore
    .gitignore配置文件用于配置不需要加入版本管理的文件。
    配置语法:
        "/"  开头表示目录;
        "*"  通配多个字符;
        "?"  通配单个字符
        "[]" 包含单个字符的匹配列表;
        "!"  表示不忽略(跟踪)匹配到的文件或目录;
         git 对于 .ignore 配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效;
    示例:
      (1)foder/* 忽略目录foder下的全部内容,不管是根目录下的 /foder/ 目录,还是某个子目录 /list/foder/ 目录,都会被忽略。
      (2)/foder/* 说明:忽略根目录下的 /foder/ 目录的全部内容;
      (3)/*
            !.gitignore
            !/fw/bin/
            !/fw/sf/
            说明:忽略全部内容,但是不忽略 .gitignore 文件、根目录下的 /fw/bin/ 和 /fw/sf/ 目录
    注意问题:
        .gitignore文件只对还没有加入版本管理的文件起作用,如果之前已经用git把要忽略的文件纳入了版本库,就不起作用了。


六、题外话

Git - 版本控制工具
Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper,后者之前一直是 Linux 内核开发人员在全球使用的主要源代码工具。开放源码社区中的有些人觉得 BitKeeper 的许可证并不适合开放源码社区的工作,因此 Torvalds 决定着手研究许可证更为灵活的版本控制系统。尽管最初 Git 的开发是为了辅助 Linux 内核开发的过程,但是我们已经发现在很多其他自由软件项目中也使用了 Git。例如 最近就迁移到 Git 上来了,很多 Freedesktop 的项目也迁移到了 Git 上。

Github - 一个网站,提供给用户空间创建git仓储,保存用户的一些数据文档或者代码等
作为开源代码库以及版本控制系统,Github目前拥有140多万开发者用户。随着越来越多的应用程序转移到了云上,Github已经成为了管理软件开发以及发现已有代码的首选方法。
如前所述,作为一个分布式的版本控制系统,在Git中并不存在主库这样的概念,每一份复制出的库都可以独立使用,任何两个库之间的不一致之处都可以进行合并。
GitHub可以托管各种git库,并提供一个web界面,但与其它像 SourceForge或Google Code这样的服务不同,GitHub的独特卖点在于从另外一个项目进行分支的简易性。为一个项目贡献代码非常简单:首先点击项目站点的“fork”的按 钮,然后将代码检出并将修改加入到刚才分出的代码库中,最后通过内建的“pull request”机制向项目负责人申请代码合并。已经有人将GitHub称为代码玩家的MySpace。

GitLab - 基于Git的项目管理软件
GitLab 是一个用于仓库管理系统的开源项目。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。三者都是基于git的,可以说是git的衍生品。

 

git学习总结

标签:

原文地址:http://www.cnblogs.com/zyf-zhaoyafei/p/4486220.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!