2 minutes
廖雪峰GIT教程简化版(总结)
2016年01月04日
Git是这个世界上最牛逼的版本控制系统(没有之一)
(本文同步发在我的OSCHINA博客)
本篇作为总结回顾或速查手册. 感谢廖雪峰前辈的精彩写作,也算借本文总来GIT的使用
一、简介
- Git是目前世界上最先进的分布式版本控制系统(没有之一)
- Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!
二、安装
Linux:
sudo apt-get install git
Mac:
- 通过homebrew安装Git参考homebrew:http://brew.sh/
- 安装Xcode, 菜单“Xcode”->“Preferences”->“Downloads”->“Command Line Tools”->“Install”
Windows: 从http://msysgit.github.io/下载msysgit安装.
安装完成后配置(–global参数,表示本机所有Git仓库都使用这个配置):
$ git config --global user.name "Your Name" $ git config --global user.email "email@example.com"
三、创建版本库
创建库
$ mkdir learngit $ cd learngit $ git init Initialized empty Git repository in /Users/michael/learngit/.git/ (系统输出)
- .git的目录是Git来跟踪管理版本库的,默认是隐藏的。
- Windows请使用高级文本编辑避免BOM问题及注意编码问题。
添加文件到GIT仓库
创建readme.txt文件
把文件添加到仓库索引
$ git add readme.txt
把文件提交到仓库(-m后面输入的是本次提交的说明)
$ git commit -m "wrote a readme file"
也可以一次提交很多文件
$ git add file1.txt $ git add file2.txt file3.txt $ git commit -m "add 3 files."
四、时光穿梭机
- 查看结果(查看当前状态)
$ git status
- 比较文件区别
$ git diff readme.txt
- 查看历史记录(查看每次的改动)(–pretty=oneline可缩成一行一条, 看起来更清楚)
$ git log
- HEAD表示当前版本, 上一个版本HEAD^, 上上一个版本HEAD^^, 上一百个版本HEAD~100
- 退回上一个版本
$ git reset --hard HEAD^
或者是ID号$ git reset --hard 3628164
git reflog
用来记录你的每一次命令, 可用来查找已被回退的版本号。- 当前目录是就是一个工作区
- 用git add把文件添加进去,实际上是把文件修改添加到暂存区
- 用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支
- 创建Git版本库时,Git自动为我们创建了唯一一个master分支
$ git checkout -- readme.txt
放弃工作区的修改$ git reset HEAD readme.txt
把暂存区的修改撤销掉(unstage),重新放回工作区$ git rm test.txt
删除文件
五、远程仓库
- 关联远程仓库
git remote add origin git@server-name:path/repo-name.git
- 第一次推送并关联(参数-u关联分支)
git push -u origin master
- 以后就可以直接推送
git push origin master
- 克隆远程仓库
$ git clone git@github.com:michaelliao/gitskills.git
- Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快.
六、分支管理
- 查看分支:
git branch
- 创建分支:
git branch <name>
- 切换分支:
git checkout <name>
- 创建+切换分支:
git checkout -b <name>
- 合并某分支到当前分支:
git merge <name>
- 删除分支:
git branch -d <name>
- 合并冲突时Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
- 用
git log --graph
命令可以看到分支合并图。 - 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并
git stash
可以暂存现场,然后去修复bug,修复后再git stash pop
,回到工作现场。- 也可全用
git stash apply
恢复,git stash drop
来删除。 git branch -D <name>
可以强行删除分支- 查看远程 库信息
$ git remote
- 显示远程库详细信息
git remote -v
- 从本地推送分支
git push origin branch-name
- 在本地创建和远程分支对应的分支
git checkout -b branch-name origin/branch-name
- 建立本地分支和远程分支的关联
git branch --set-upstream branch-name origin/branch-name
- 从远程抓取分支
git pull
七、标签管理
git tag <name>
用于新建一个标签,默认为HEAD,也可以指定一个commit id- 指定标签信息
git tag -a <tagname> -m "blablabla..."
- 用PGP签名标签
git tag -s <tagname> -m "blablabla..."
- 查看所有标签
git tag
- 推送一个本地标签
git push origin <tagname>
- 推送全部未推送过的本地标签
git push origin --tags
- 删除一个本地标签
git tag -d <tagname>
- 删除一个远程标签
git push origin :refs/tags/<tagname>
八、自定义GIT
忽略某些文件时,需要编写.gitignore
.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
配置别名,例:
$ git config --global alias.st status
用st表示statusgit config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
配置上看看就知道啥效果了。配置文件都放在.git/config文件中
搭建GIT服务器
$ sudo apt-get install git $ sudo adduser git $ sudo git init --bare sample.git $ sudo chown -R git:git sample.git git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell $ git clone git@server:/srv/sample.git
320 Words
2016-01-04 08:00 +0800
Read other posts