git

自报家门
  • 使用git之前,要先自报家门
  • git config --global user.name "用户名"
  • git config --global user.email "邮箱地址"
本地仓库
  • 新建或选择一个目录然后,使用git init命令把这个目录变成Git可以管理的仓库

  • 图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道,因此,如果要真正使用版本控制系统,就要以纯文本方式编写文件

  • 因为文本是有编码的,如果没有历史遗留问题,强烈建议使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。

提交文件
  • 使用git add 文件名将一个新文件添加到仓库
  • 使用git commit -m "更新信息"将修改提交到仓库
  • -m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录
  • 为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:
git add file1.txt
git add file2.txt file3.txt
git commit -m "add 3 files."
查看信息
  • git status命令可以让我们时刻掌握仓库当前的状态
  • git diff可以查看修改的内容
  • git log可以查看版本变更的历史记录,如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数
  • git log --pretty=oneline
版本回退
  • 在Git中,HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,往上100个版本就是HEAD~100
  • 使用git reset --hard 版本标识命令进行版本跳转
  • 如:git reset --hard HEAD^
  • 也可以重新跳转回最新的版本,git reset --hard 3628164
  • 版本号没必要写全,前几位就可以了,Git会自动去找
  • 回退版本后,却忘了最新版本的版本号怎么办?

    Git记录了版本变更的记录,可以使用git reflog查看版本变更记录

工作区和暂存区
  • 工作区:就是你在你的电脑里能看到的目录
  • 版本库:工作区内部有一个.git目录,这个不算工作区,而是git的版本库
  • Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
  • 前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
    • 第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区
    • 第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支
  • git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支
管理修改
  • 为Git跟踪并管理的是修改,而非文件。
  • 新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改。
  • git commit只负责把暂存区的修改进行提交
  • 提交修改还是使用git addgit commit命令完成的
  • git checkout -- file中的--很重要,如果没有,就变成了切换到另一个分支的指令
撤销修改
  • git checkout -- file可以丢弃工作区的修改
  • 注意还未执行git add时上述操作才有效
  • 已经执行git add,但还没有commit,可以使用git reset HEAD回退到最后commit的版本
删除文件
  • 删除也是一个修改操作
  • Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了
  • 现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并提交git commit
  • 另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本
  • git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”
配置远程仓库
  • ssh-keygen -t rsa -C "Lyinghao@126.com"
  • 把id_rsa.pub配置到github的SSHKey中
添加远程仓库
  • 在本地的learngit仓库下运行命令:git remote add origin git@github.com:TommyChok/learngit.git
  • 把本地内容添加到远程仓库:git push -u origin master
  • 把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
  • 由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
  • 推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样:
  • 以后提交,只需执行git push origin master
从远程库克隆
  • 假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆。
  • 首先,登陆GitHub,创建一个新的仓库,名字叫gitskills:
  • 进入本地目录,执行git clone git@github.com:TommyChok/gitskills.git
  • 要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆
  • Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。
创建合并分支
  • 使用命令:git checkout -b dev创建并切换到dev分支
  • git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
    • git branch dev
    • git checkout dev
  • git branch命令可以查看当前分支
  • git branch命令会列出所有分支,当前分支前面会标一个*号
  • git merge命令用于合并指定分支到当前分支
解决冲突
  • 执行merge后可能发生冲突git merge feature1
  • 发生冲突后,可使用git status查看冲突的文件
  • 重新编辑冲突文件,解决冲突
  • 重新git addgit commit新文件,冲突解决
  • 可使用git log --graph --pretty=oneline --abbrev-commit查看分支合并的情况
  • 合并分支后,可删除无用分支git branch -d feature1
分支管理策略
  • 通常,合并分支时,如果可能,Git会使用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息
posted @ 2017-09-18 13:55  tan90丶  阅读(133)  评论(0编辑  收藏  举报