git学习总结

基本命令

  • 安装git

    • 下载安装git
    • 配置username 和 emai
      • git config –global user.name “Your Name”
      • git config –global user.email “email@example.com”
      • 注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
  • 创建和初始化版本库

    • mkdir learngit
    • git init
  • 添加文件到仓库

    • git add readme.txt [添加到暂存区]
  • 提交文件到仓库

    • git commit -m “wrote a readme file”
  • 查看仓库当前状态

    • git status
  • 查看本地文件修改内容

    • git diff readme.txt [比对工作区和缓存去的不同]
    • git diff HEAD – readme.txt [查看工作区和版本库里面最新版本的区别]
  • 查看提交日志

    • git log
    • git log –pretty=oneline [精简日志信息]
  • 回退到版本

    • git reset –hard HEAD^ [回退到上一版本]
    • git reset –hard HEAD^^ [回退到上二版本]
    • git reset –hard HEAD~10 [回退到上10个版本]
  • 回到未来的某个版本

    • git reset –hard 3628164 [只要知道未来的commit id就行]
  • 查看历史命令

    • git reflog [可以用来找回未来的某个commit id, 用来回退]、
  • 撤销工作去的修改[或恢复到最新版本]

    • git checkout – readme.txt
  • 删除文件

    • git rm test.txt [从版本库中删除]
    • git commit test.txt

远程仓库(已githup为例)

  • 创建SSH Key

    • ssh-keygen -t rsa -C “youremail@example.com”

      • 在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥。
    • 在Github上添加SSH Key

      • 登陆GitHub,打开“Account settings”,“SSH Keys”页面
      • 然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容
  • 添加远程仓库

    • git remote add origin git@github.com:zq210wl/learngit.git [添加远程仓库origin]
  • 把本地库的内容推送到远程库上

    • git push -u origin master [第一次提交分支时]
      • 由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送到远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
    • git push origin master [把当前本地库内容推动到远程origin库下的master分支]
    • git push [推送当前所在分支到远程库,如果当前是在dev分支,那么会提交到dev上]
  • 克隆远程分支到本地

    • git clone git@github.com:zq210wl/learngit.git destinationDir [目标文件夹可选]
      • 默认从远程clone的仓库,在本地只有主分支,如果要用其他分支就必须自己创建,然后建立对应联系
      • 当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。
  • 创建分支

    • git branch dev [在当前分支上创建dev分支]
  • 切换分支

    • git checkout dev
  • 创建并切换到分支

    • git checkout -b dev [加上-b参数表示创建并切换]
  • 查看分支

    • git branch
  • 查看远程仓库信息

    • git remote
    • git remote -v [显示更详细的信息]
  • 合并分支

    • git merge dev [合并某分支到当前分支,如果要合并到master分支,就必须切换到master分支下] [Fast forward模式]
    • git merge –no-ff -m “merge with no-ff” dev [–no-ff]
      • 合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
  • 删除分支

    • git branch -d dev
    • git branch -D dev [强行删除还没有合并的分支]
    • git push origin :dev [删除远程dev分支]
  • 解决冲突

    • Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
    • 需要手动解决冲突
  • 查看分支合并图

    • git log –graph –pretty=oneline –abbrev-commit
    • git log –graph
  • 设置本地分支和远程分支的联系

    • git branch –set-upstream dev origin/dev
      • 如果远程已经有一个dev分支,而你又在本地创建了自己的dev分支,如果要从远程dev分支上更新文件就需要建立联系
  • 从远程抓取分支
    • git pull
      • 如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建
  • 注意:

    • 一个仓库只能关联一个远程库,所以get remote 只会有一个库
    • 一个库可以有多个分支
    • 本地分支和远程分支的区别?

      • 在本地创建的分支就是本地分支; git branch
      • 如果把本地创建的分支push到远程仓库,那么在远程仓库上就存在了这个分支,也就叫做远程分支; git remote
      • 开发两种有一些分支是不需要提交到远程仓库,只需要在本地合并到主分支,然后再push到远程主分支
    • 什么时候用分支?

      • 一般是在开发一个新feature时,先创建一个分支, 在这个分支完成此feature然后再merge到master分支,合并完后,如果此feature已经完成,可以删除此分支,如果有另一个feature的话,可以再重新常见分支,以此类推
  • 分支策略:

高级使用

  • 创建标签
  • 忽略某些文件
    • 在库的根目录下创建 .gitignore 文件,并提交次文件
    • 格式
      • # 注释符号
      • 每行写一个要忽略的文件或目录
      • 示例:
        • build.xml
        • *.class
        • *.log
        • bin/
  • 配置别名
  • 搭建Git服务器

参考网址