Git学习备忘

原文地址

Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

更新:

  • 2016-08-11 添加‘其他使用场景’模块
  • 2016-08-12 添加‘git相关学习资源’模块

可视化软件

官网在这里:https://www.git-scm.com/,在git 官网上这种GUI工具多达十几款,在Mac平台我推荐一两款好用的软件GUI,官网GUI客户端列表:https://www.git-scm.com/downloads/guis

  1. DiffMerge 是一款可视化的文件比较(也可进行目录比较)与合并工具。
该软件主要具有文件差异比较、自动化的文件合并、以及文件夹差异比较这三大功能。这里下载:[http://sourcegear.com/diffmerge/](http://sourcegear.com/diffmerge/)
  1. SourceTree (Windows/Mac)免费
官网在这里:[https://www.sourcetreeapp.com/](https://www.sourcetreeapp.com/)
  1. Gitup(Mac)免费开源
好玩的Gitup是 Mac OS X 的全功能开源 Git 客户端,提供快速,安全的操作,直接在硬盘上与 Git 数据库交互,操作库的图而不是操作 commits,官网在这里:[http://gitup.co/](http://gitup.co/)

git 安装

Windows

  1. 安装git for window
  2. 安装TortoiseGit-1.8.16.0-64bit.msi
  3. 配置path C:\Program Files\Git\bin
  4. 详见enter link description here

Mac

  1. 最为简单的方式是安装 .dmg 格式的安装包。其中带有一个正在解包图标的文件(扩展名为 .pkg )是 Git 的安装程序
  2. 点击扩展名为 .pkg 的安装程序,开始 Git 的安装
  3. 安装完毕,git 会被安装到 /usr/local/git/bin/ 目录下。重启终端程序,才能让 /etc/paths.d/git 文件为 PATH 环境变量中添加的新路径注册生效。然后就可以在终端中直接运行 git 命令了。
  4. 下载地址:enter link description here

git 配置

 git config --global user.name "xxx"             //配置用户名   

 git config --global user.email "[email protected]"    //配置邮件  

 git config --list                               //检查已有的配置信息

git 使用

基础操作

git init                        //初始化git仓库  

git add .                       //添加所有文件到暂存区  

git status                      //查看Git仓库状态,要随时掌握工作区的状态  

git commit -m 'xxx'             //提交已添加的文件到git仓库  

git commit -am 'xxx'            //将add和commit合为一步  

git log /git reflog             //显示最近到最远的提交日志(历史)/(未来)  

git reset --hard      //HEAD^--返回上个版本,  
                                //HEAD~100--返回上100个版本  
                                //commit_id--对应版本的commitId  

远程仓库

创建SSH Key

  • 打开终端,输入 ssh-keygen -t rsa -C "[email protected]" 邮箱更新为自己的
  • 回车保存默认位置
  • 输入密码,用来加密私钥(以后就要用这个密码)
image
  • 密钥存放在主文件夹的.ssh文件夹内
  • 打开文件备份 id_rsa(私钥) ; id_rsa.pub(公钥)两个文件,打开公钥,复制所有内容

与远程仓库绑定

  • 在远程服务器,如coding/github页面内找到添加公钥选项,粘贴刚刚复制的内容,添加即可.

远程命令

  • git remote命令就用于管理主机名。

      git remote add <主机名> <网址>           //用于添加远程主机  
      git remote rm <主机名>                  //用于删除远程主机
      git remote rename <原主机名> <新主机名>   //用于远程主机的改名
      git remote (-v)                        //要查看远程库的信息(显示更详细的信息)  
    
  • git fetch命令用于取回远程更新至本地

      git fetch <远程主机名>             //将某个远程更新,全部取回本地
      git fetch <远程主机名> <分支名>     //取回特定分支的更新
      //所取回的更新,在本地主机上要用"远程主机名/分支名"的形式读取。比如origin主机的master,就要用origin/master读取。
    
  • git pull取回远程主机某个分支的更新,再与本地的指定分支合并。

      git pull origin next(:maste)    //取回origin主机的next分支,与当前(本地的master)分支合并
    
  • git push命令用于将本地分支的更新,推送到远程主机

      git push origin <本地分支名>:<远程分支名> //提交本地的某分支,与origin主机的某分支合并
      git push -u origin master             //将本地master分支推送到origin主机,同时指定origin为默认主机,之后就可以不加任何参数使用git push   
      git push --all origin                 //将本地所有分支推送到origin主机
      git push origin master                //将master分支推送到origin远程主机
      git push origin --tags                //推送包含标签(tag)   
      git push -f                           //强推,即利用强覆盖方式用你本地的代码替代git仓库内的内容
      git clone                        //克隆远程仓库到本地
      git clone <版本库的网址> <本地目录名>    //克隆远程仓库到本地指定文件名
    
  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;

分支

git branch                         //查看所有分支  

git branch                   //创建分支  

git checkout                 //切换分支  

git checkout -b              //创建并切换分支

git checkout -b newBrach origin/master //在origin/master的基础上,创建一个新分支

git merge                    //合并某分支到当前分支  

git branch -d                //删除分支

git branch -a                      //显示所有分支

git branch -r                      //显示所有远程分支

git branch --merged                //显示所有已合并到当前分支的分支

git branch --no-merged             //显示所有未合并到当前分支的分支

git branch -m master master_copy   //本地分支改名
  • master分支是主分支,因此要时刻与远程同步;
  • dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
  • bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
  • feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

标签

git tag                         //用于新建一个标签,默认为HEAD,也可以指定一个commit id;  

git tag -a  -m "blablabla..."//可以指定标签信息;  

git tag -s  -m "blablabla..."//可以用PGP签名标签;  

git tag                               //查看所有标签  

git push origin              //推送一个本地标签;  

git push origin --tags                //推送全部未推送过的本地标签;  

git tag -d                   //删除一个本地标签;  

git push origin :refs/tags/  //删除一个远程标签。  

其他使用场景

  • 保存进度

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

  • 合并分支

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

合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

  • 撤销修改

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,则需要版本回退,不过前提是没有推送到远程库。

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

git相关学习资源

  1. git的详细介绍:Git详解之一:Git起步
  2. git安装和配置:Git安装与配置
  3. git与TortoiseGit(小乌龟)的基本操作:Git与TortoiseGit基本操作
  4. git的基础教程:廖雪峰的gitgit教程
  5. git的使用流程:Git使用教程
  6. git远程操作详解:阮一峰的Git远程操作详解
  7. git常用命令总结:git常用命令总结
  8. 搭建基于SSH的Git服务器:Windows下搭建基于SSH的Git服务器;自己动手搭建Git服务器-Gitblit
  9. git整体介绍:30 分钟 git 命令入门到放弃 - 掘金

你可能感兴趣的:(Git学习备忘)