前言

我先是看廖老师的git教程学习的git,小伙伴们可以直接百度廖老师的教程。

这里自己总结一下,可以当作教程,也供自己查阅使用。

1.安装

linux下安装十分方便,直接sudo apt-get install git就可以了。

Windows可以上git官网下载。然后右键或开始里会有git bash

由于我之前先安了bash,所以在bash里直接安的git。这和官网下的比有一个好处,就是git是中文的提示hhh,这不重要。

安装完后需要最后一步设置:

git config --global user.name "Your Name"
git config --global user.email "email@example.com"

--global用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

2.创建

在命令行进入需要创建git仓库的文件,

git init

git仓库就创建好了,这时文件夹中多了一个.git文件夹。注意不要修改这个文件夹中的内容。

添加文件到仓库需要两个步骤,先add到暂存区,

git add 文件名 //添加某个文件到暂存区。多个文件用空格分开
git add .      //添加所有文件到暂存区。

再commit到本地仓库。

git commit -m "这里写注释" //注释很重要,提交暂存区的所有内容
git commit 文件1 文件2 ... -m "注释" //只提交暂存区的某些文件

3.工作区与暂存区

上面说到了暂存区,这里简单介绍一下:
* 工作区就是我们文件夹下的内容,我们正在工作修改的地方就是工作区。(除了.git文件夹)
* 暂存区就是add操作后的区域,简单理解暂存区的作用就是,将需要提交的文件修改通通add放到暂存区,然后,一次性的commit提交暂存区的所有修改。

4.修改

修改一下文件中的内容,运行

git status

可以查看哪些文件被修改了。具体的修改内容,可以使用下面命令查看。

git diff 文件名
git diff HEAD  //显示工作区与当前分支最新commit之间的差异

然后就可以通过add、commit提交到本地仓库了。提交后再status查看,可以发现没有新的修改。

5.版本回退

这个功能是git最好用的功能之一。完全就是后悔药啊。使用

git log
git log --stat//显示commit历史,以及每次commit发生变更的文件

可以查看之前的提交。(提示,按q取消查看,或者ctrl+z也行..)

要是觉得太乱了,可以试试

git log --pretty=oneline

我们使用如下命令回退版本(我们一般用HEAD表示当前版本)

git reset --hard HEAD^    //回退前一个版本
git reset --hard HEAD^^   //回退前两个版本
……

这样可以,就是要回退很久远的版本还要数数,写很多个^。所以我们经常使用下面这个

git reset --hard 15aefa52

后面这个类似乱码的就是之前log时候看到的对应版本的版本号,不用全复制,随手复制前6、7、8、9位就可以。

然后你就会发现,代码都恢复到之前的版本了。

当然如果再想恢复到之后的版本,log里是没有了,使用下面这个可以查到。

git reflog

6.撤销修改

如果想要撤销工作区的修改,可以执行

git checkout -- 文件名

这样就变为上一次提交时候的状态,上一次提交之后的修改被撤销了。

如果想要撤销add到暂存区的修改,可以执行

git reset HEAD 文件名

这样add到暂存区的修改回到了add之前的状态,工作区还存在修改,如果想继续撤销工作区的修改,执行上一条命令。

如果想撤销commit到本地仓库的修改,请使用版本回退。

7.删除文件

如果你删除了工作区的某个文件,可以执行

git rm 文件名

将这次删除操作添加到暂存区,然后commit提交。

如果误删了工作区的某个文件,可以使用上面撤销修改来恢复。

8.远程仓库

自行注册一个github帐号,然后按照下面命令设置SSH。

  • 先查看自己之前有没有创建过ssh key。在用户主目录下,.ssh文件夹中,查看是否有id_rsaid_rsa.pub。没有执行1,有执行2。

  • 创建SSH Key。执行下面命令

ssh-keygen -t rsa -C "youremail@example.com"
  • 在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

  • 将公钥添加到github的设置中。

9.推送到远程仓库

在github上手动new一个仓库(repository),填写一下仓库名称,比如叫test

然后我们可以根据github的提示将本地仓库与远程仓库关联

git remote add origin git@github.com:你的github名/test.git

origin是远程库的名字,一般都这样叫,不会有人修改。

然后把本地库推送到远程库中

git push -u origin master

由于是第一次推送,所以加上了-u参数。Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

以后再提交就不用-u参数了。

git push origin master

10.从远程库克隆

如果想克隆别人的远程仓库,或让别人克隆自己的远程仓库,只需执行:

git clone git@github.com:用户名/仓库名.git

11.本地分支管理

前面已经接触过git主分支,即master分支。也接触过HEAD,HEAD其实是一个指针,指向了master分支。
我们可以用

git branch

查看当前分支,当前所在分支前面会标*号。
创建一个分支

git branch dev

这样我们就创建了一个分支,然后使用下面命令切换到这个分支

git checkout dev

当然我们可以使用下面的命令,直接创建并切换到新分支

git checkout -b dev

然后修改文件,add,commit提交到dev分支。

然后我们git checkout master切回master分支后,会发现新的修改不见了,因为刚刚是在dev分支,master并没有改变。

可以使用下面命令将dev分支合并到master分支上

git merge dev

git merge命令用于合并指定分支到当前分支

然后我们就可以删除dev分支了:

git branch -d dev

12.解决冲突

这里是最不想碰到的,但是又不可避免。
git会提醒我们某某文件needs merge。
我们可以执行

git merge 文件名

然后一般要手动解决冲突。打开该文件,找到文件中如下区域

<<<<<<< HEAD
一个版本的代码..
=======
另一个版本的代码..
>>>>>>> feature1

Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容。我们把这部分改成最后想要的代码,把这些特色符合都删掉保存即可。
然后就可以通过add、commit了。

使用

git log --graph

可以查看分支合并图。

13.分支管理策略

通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

git merge --no-ff -m "merge with no-ff" dev

因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。这样使用git log查看会与没有no-ff的情况不同,这里会有一个merge记录。如果没有no-ff且没有冲突的话,是没有merge记录的。

14.远程分支

查看远程分支,使用

git branch -r  //列出所有远程分支
git branch -a  //列出所有本地分支和远程分支
git push origin local_branch:remote_branch  //将本地分支推送到远程,如果远程不存在该分支则自动创建。
git push origin remote_branch   //上传本地指定分支到远程仓库
git push origin --all //推送所有分支到远程仓库

删除远程分支

git push origin :remote_branch
git push origin --delete remote_branch

15.stash

使用

git stash

可以把现在的工作储存起来,再使用status查看时,可以发现工作区是干净的。这主要用于工作到一半时,有另一个紧急任务需要做,可以先把工作储存起来,紧急任务完成后,再恢复继续。

使用

git stash list

查看stash存的内容。

恢复可以有两个方法,方法一

git stash apply  //恢复,但不删除stash记录
git stash drop   //删除stash记录

方法二

git stash pop   //恢复并删除stash list中的内容

多次stash储存了多个list,可以使用apply恢复指定的stash。

git stash apply stash@{0}
git stash pop stash@{0}

清空stash记录

git stash clear

标签

// 列出所有tag
git tag// 新建一个tag在当前commit
git tag 标签名称// 新建一个tag在指定commit,先log找到commitId
git tag 标签名 commitId// 删除本地tag
git tag -d 标签名// 删除远程tag
git push origin :refs/tags/标签名// 查看tag信息
git show 标签名// 提交指定tag
git push origin 标签名// 提交所有tag
git push origin --tags// 新建一个分支,指向某个tag
git checkout -b 分支名 标签名

remote

git remote     //列出所有远程主机
git remote -v  //查看远程主机的网址

fetch

git fetch      //将远程主机的更新全部取回本地
git fetch origin master  //从远程的origin的master主分支下载最新的版本到origin/master分支上

//比较本地的master分支和origin/master分支的差别
git log -p master..origin/master
//最后进行合并
git merge origin/master   

git pull其实相当于上面全部内容。

rebase

git rebase用于把一个分支的修改合并到当前分支
留个坑,以后补上。可以先查看这篇文章。
http://blog.csdn.net/wh_19910525/article/details/7554489

git学习笔记兼教程相关推荐

  1. ​​​​​​​Git学习笔记与IntelliJ IDEA整合

    2019独角兽企业重金招聘Python工程师标准>>> Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:htt ...

  2. Git 学习笔记:自定义Git(完)

    前言 在补习python的时候主要参考的是廖雪峰的教程Python教程,在学习完后准备完成期末作业时,遇到了一个技术难题,需要初步掌握git,因此开始了git的学习. 本教程参考廖雪峰的Git教程 G ...

  3. Git学习笔记:标签管理以及GItHub

    前言 在补习python的时候主要参考的是廖雪峰的教程Python教程,在学习完后准备完成期末作业时,遇到了一个技术难题,需要初步掌握git,因此开始了git的学习. 本教程参考廖雪峰的Git教程 G ...

  4. Git学习笔记:分支管理3

    前言 在补习python的时候主要参考的是廖雪峰的教程Python教程,在学习完后准备完成期末作业时,遇到了一个技术难题,需要初步掌握git,因此开始了git的学习. 本教程参考廖雪峰的Git教程 G ...

  5. Git学习笔记:分支管理(2)

    前言 在补习python的时候主要参考的是廖雪峰的教程Python教程,在学习完后准备完成期末作业时,遇到了一个技术难题,需要初步掌握git,因此开始了git的学习. 本教程参考廖雪峰的Git教程 G ...

  6. Git学习笔记:分支管理(1)

    前言 在补习python的时候主要参考的是廖雪峰的教程Python教程,在学习完后准备完成期末作业时,遇到了一个技术难题,需要初步掌握git,因此开始了git的学习. 本教程参考廖雪峰的Git教程 G ...

  7. Git学习笔记:远程仓库

    前言 在补习python的时候主要参考的是廖雪峰的教程Python教程,在学习完后准备完成期末作业时,遇到了一个技术难题,需要初步掌握git,因此开始了git的学习. 本教程参考廖雪峰的Git教程 G ...

  8. Git学习笔记:修改

    前言 在补习python的时候主要参考的是廖雪峰的教程Python教程,在学习完后准备完成期末作业时,遇到了一个技术难题,需要初步掌握git,因此开始了git的学习. 本教程参考廖雪峰的Git教程 G ...

  9. Git学习笔记与IntelliJ IDEA整合

    Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...

最新文章

  1. Linux下CMake简明教程(七)对库进行链接
  2. python爬虫-urllib模块
  3. [最新下载] 【火车票订票外挂】Go-Home–12306.cn 网上火车票自动订票程序
  4. 计算机在输电线路设计中的应用研究,计算机在输电线路基础设计中的应用原稿(备份存档)...
  5. C++学习之路 | PTA乙级—— 1068 万绿丛中一点红 (20 分)(精简)
  6. 使用beego开发多表查询返回字段问题
  7. mysql less6教程_Sqli labs系列-less-56 报错注入法(上)
  8. 推荐系统的变与不变:冷启动、召回排序、长期生态与目标拆解
  9. linux 安装vmware-tools详解
  10. “SecureCRT遇到一个致命的错误且必须关闭”处理办法
  11. html5直播礼物动画,GitHub - General757/giftanim: 直播礼物动画 送赞送礼物动画 仿映客礼物动画侧栏弹出送花人和礼物以及x1 x2 x3效果,支持队列 排序...
  12. android pin码解锁,解锁三星的3种方法:SIM网络解锁PIN码
  13. appium的滑动操作总结
  14. 【032】基于51单片机的PT100热电阻温度计Proteus仿真设计
  15. 网络设备设置/取消console口登陆单独密码
  16. hadoop安装作业
  17. 山东农业大学计算机类男女比例,男女比例_山东农业大学
  18. [内网渗透]—GPO批量控制域内主机
  19. linux之cut的使用
  20. vue和layui哪个更好用_指纹锁哪个牌子更好用?

热门文章

  1. CryEngine3-CE3本地化系统入门、UI字体更换
  2. asp.net mvc Partial OutputCache 在SpaceBuilder中的应用实践
  3. 【BIOS大全】释义+设置+精解+释疑————玩转电脑必备工具帖(9)
  4. W5500作为服务器突然断线
  5. 谷歌浏览器手势操作_[经验分享] 2步操作永久提升谷歌Chrome浏览器默认下载速度...
  6. 提高sql查询效率速成宝典
  7. openssl 漏洞 修复 教程
  8. python:中文词法分析(LAC)
  9. Maya中的场景与Unity3D中的场景匹配
  10. 设计模型学习笔记(1) —— 大话设计模式/图说设计模式