简介
Git是目前世界上最先进的分布式版本控制系统
Linus花了两周时间自己用C写了一个分布式版本控制系统
使用
- 需要安装git
- new
- git init,创建新的git仓库
需要关联远程仓库git remote add origin git@github.com:***/Refacor.git
- git clone /path/to/repository 创建一个本地仓库的克隆版本
- git init,创建新的git仓库
- 工作流
本地仓库由git维护的三棵树组成,第一个是工作目录,是实际文件;第二个是暂存区(index),临时保存你的改动;最后是HEAD,指向你最后一次提交的结果,如下图所示 - 常见命令
添加和提交
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
分支
- 分支是用来将特性开发绝缘开来的。在你创建仓库的时候,master 是“默认的”分支。在其他分支上进行开发,完成后再将它们合并到主分支上。
- 创建一个叫做“feature_x”的分支,并切换过去:
git checkout -b feature_x
- 切回主分支:
git checkout master
- 再把新建的分支删掉
git branch -d feature
git push origin <branch>
更新与合并
- 并其他分支到你的当前分支(例如 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
- 并其他分支到你的当前分支(例如 master),执行
- 标签
git tag 1.0.0 1b2e1d63ff
- log log日志
- 替换本地改动
git fetch origin git reset --hard origin/master
- 使用tips
- 内建的图形化 git:
gitk
- 彩色的 git 输出
git config color.ui true
- 显示历史记录时,每个提交的信息只显示一行:
git config format.pretty oneline
- 交互式添加文件到暂存区:
git add -i
- 内建的图形化 git:
配置
Git push requires username and password,解决办法[2]:
git remote set-url origin git@github.com:username/repo.git
多帐号的配置
ssh-keygen -t rsa -C "xx@xx.com"
不通的仓库需要设置不同的用户名和邮箱,如果之前有设置需要unset
``git config —global —unset user.namegit config --global --unset user.email``
在不同的仓库下设置
git config user.name "yourname" git config user.email "youremail"
- 查看以及修改用户名
git config —list git config -lgit 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