简介
- Git是目前世界上最先进的 分布式版本控制系统
- CVS及SVN都是 集中式的版本控制系统
集中式版本控制系统:有一个中央服务器,先取再传
分布式版本控制系统:没有中央服务器,每个人的电脑上都有一个版本库,故不需要联网,多人写作,推送修改。具有强大的分支管理功能
安装
先下载,然后
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
创建版本库(repository)
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
$ git init
$ git add 文件名
$ git commit -m "....xxxx"
时光机
$ git status
查看仓库的状态
$ git diff 文件名
查看difference
版本回退
用 $ git log
来查看历史记录
$ git log --pretty=oneline
只查看一行
上一个版本 head^
上上个 head^^
$ git reset --hard HEAD^
$ git reset --hard 3628164
这里的数字是id
$ git reflog
记录每一个记录,可以找到id
工作区和暂存区
工作区就是电脑里文件目录
版本库:.git文件,版本库里最重要的stage就是暂存区
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
管理修改
cat index.html
查看index.html的内容
如果:
第一次修改 -> git add -> 第二次修改 -> git commit
第二次修改并没有进入暂存区,不会被提交
解决:
git add再git commit
第一次修改 -> git add -> 第二次修改 -> git add -> git commit
撤销修改
$ git checkout -- readme.txt
- git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
把readme.txt文件在工作区的修改全部撤销
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
删除修改
$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
如果删错了
$ git checkout -- test.txt
添加到远程库
关联 git remote add origin git@server-name:path/repo-name.git
第一次推送 git push -u origin master
从远程库克隆 $ git clone git@github.com:michaelliao/gitskills.git
分支
查看分支:git branch
创建分支:git branch
切换分支:git checkout
创建+切换分支:git checkout -b
合并某分支到当前分支:git merge
删除分支:git branch -d
解决冲突
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
用git log –graph命令可以看到分支合并图。
- 如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。
多人协作
多人协作的工作模式通常是这样:
首先,可以试图用git push origin branch-name推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch –set-upstream branch-name origin/branch-name