Git

简介

Git是目前世界上最先进的分布式版本控制系统
Linus花了两周时间自己用C写了一个分布式版本控制系统

使用

  1. 需要安装git
  2. new
    • git init,创建新的git仓库
      需要关联远程仓库git remote add origin git@github.com:***/Refacor.git
    • git clone /path/to/repository 创建一个本地仓库的克隆版本
  3. 工作流
    本地仓库由git维护的三棵树组成,第一个是工作目录,是实际文件;第二个是暂存区(index),临时保存你的改动;最后是HEAD,指向你最后一次提交的结果,如下图所示
  4. 常见命令
  5. 添加和提交

    • git add <filename> or git add * 提出更改添加到暂存区
    • git commit -m "balabala..." 实际提交改动到HEAD,但还是没有到远端仓库
    • git push origin master 推送到远端仓库,可以把 master 换成你想要推送的任何分支。
    • 如果不是通过克隆仓库,而是通过本地init,把本地仓库和远程仓库关联起来.git remote add origin git@github.com:用户名/仓库名.git
  6. 分支

    • 分支是用来将特性开发绝缘开来的。在你创建仓库的时候,master 是“默认的”分支。在其他分支上进行开发,完成后再将它们合并到主分支上。
    • 创建一个叫做“feature_x”的分支,并切换过去:git checkout -b feature_x
    • 切回主分支:git checkout master
    • 再把新建的分支删掉git branch -d feature
    • git push origin <branch>
  7. 更新与合并

    • 并其他分支到你的当前分支(例如 master),执行git merge <branch>
    • 处理冲突
    • git add <filename>
    • 预览差异:git diff <source_branch> <target_branch>
    • 统计文件的差异git diff --stat local_branch origin/remote_branch
    • 远程主机版本更新,同步到本地.
      方法一: git fetch origin master git diff master git merge master
      方法二: git pull origin master直接merge到本地,fetch则是从远程获取更新版本到本地,但是不自动merge
  8. 标签 git tag 1.0.0 1b2e1d63ff
  9. log log日志
  10. 替换本地改动
    git fetch origin git reset --hard origin/master
  11. 使用tips
    • 内建的图形化 git:gitk
    • 彩色的 git 输出 git config color.ui true
    • 显示历史记录时,每个提交的信息只显示一行:git config format.pretty oneline
    • 交互式添加文件到暂存区:git add -i

配置

  1. Git push requires username and password,解决办法[2]:
    git remote set-url origin git@github.com:username/repo.git

  2. 多帐号的配置
    ssh-keygen -t rsa -C "xx@xx.com"
    不通的仓库需要设置不同的用户名和邮箱,如果之前有设置需要unset
    ``git config —global —unset user.name

    git config --global --unset user.email``
    

    在不同的仓库下设置
    git config user.name "yourname" git config user.email "youremail"

  3. 查看以及修改用户名
    git config —list git config -l
    git config user.name git config user.email git config --global user.name "your name" git config --global user.email "your email"

参考文献

[1] http://marklodato.github.io/visual-git-guide/index-zh-cn.html
[2] http://stackoverflow.com/questions/6565357/git-push-requires-username-and-password
[3] http://rogerdudler.github.io/git-guide/index.zh.html
[4] http://marklodato.github.io/visual-git-guide/index-zh-cn.html
[5] http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
[6] https://git-scm.com/book/zh/v1
[7] http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html
[8] https://blog-scottwang.rhcloud.com/post/2016/11/23/54-for-git.html