自用笔记。原博客:https://www.liaoxuefeng.com/wiki/896043488029600
集中式VS分布式
集中式版本控制系统(SVN):版本库是集中存放在中央服务器,类比图书馆。
分布式版本控制系统:安全性要高很多,每个人电脑里都有完整的版本库
安装Git
WIN:在Git官网下载安装好Git后,需要在Git Bash中设置名字和邮箱
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
--global参数表示这台机器所有的Git仓库都会使用这个配置
创建版本库
版本库又名仓库(repository),这个目录里面的所欲文件都可以被Git管理。
创建版本:
- 创建一个空目录
$ mkdir learngit $ cd learngit $ pwd //显示当前目录 /c/Users/luo
- 通过git init命令把这个目录变成Git可以管理的仓库
$ git init Initialized empty Git repository in /c/Users/luo/learngit/.git/
将文件添加到仓库中:
- 编写一个新文件,这里是readme.txt。将该文件放到learngit目录下(子目录也行)
- 用git add命令告诉Git,把文件添加到仓库
$ git add readme.txt
- 用git commit命令告诉Git,把暂存区的文件提交到仓库
$ git commit -m "wrote a readme file" [master (root-commit) eaadf4e] wrote a readme file 1 file changed, 2 insertions(+) create mode 100644 readme.txt
--m后是本次提交的说明
- 添加文件需要add,commit两步,可以先add很多不同的文件,再commit一次提交很多文件,比如
$ git add file1.txt $ git add file2.txt file3.txt $ git commit -m "add 3 files."
时光机穿梭
git status命令可以时刻掌握仓库当前的状态
git diff可以查看修改的内容
版本回退:
git log可以查看命令的历史记录
git reset --hard HEAD^可以回退到上一个版本
git reset --hard 版本号 可以回退到指定版本
git reflog用来记录历史命令,可以查看以前提交的版本号
工作区:电脑里能看到的目录,如learngit文件夹就是一个工作区
版本库:工作区中的隐藏目录 .git ,里面存放了很多东西,最为重要的是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
git commit就是王master分支上提交更改(需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。)。
git add两个文件后,暂存区的状态:
git commit -m "..."后:
git diff HEAD -- readme.txt命令可以查看工作区和版本库里最新版本的区别。
如果只是修改文件,但是没有用git add到暂存区,那就不会commit提交到master中。
git checkout -- file命令可以把文件回到最近一次git commit 或 git add 的状态,也可以直接丢弃工作区的修改
git checkout -- readme.txt
git reset HEAD <file>可以把暂存区未commit的修改撤销掉,重新放回工作区,即撤销git add
$ git reset HEAD readme.txt
Unstaged changes after reset:
M readme.txt
如果想删除工作区的内容,就用cheakout
git rm <file>可以删除版本库中的文件,git checkout可以撤销操作
远程仓库
关联远程库: git remote add origin git@github.com:cspi2018/new.git
删除远程库:git remote rm origin
把本地库所有内容推送到远程库上:git push -u origin master
从远程库克隆:git clone git@github.com:cspi2018/new.git
查看当前远程库地址:git remote -v
分支管理
创建dev分支并切换到dev分支:git checkout -b dev 相当于git branch dev加git checkout dev两条命令
查看当前分支:git branch 当前分支前面会标记一个*
切换回master分支:git checkout master
如果没有合并分支,master未改变。合并分支:git merge dev
合并完后删除分支:git branch -d dev
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
用git log --graph命令可以看到分支合并图。