Git是目前世界上最先进的分布式版本控制系统。
版本控制系统
自动记录每次文件的改动,还可以多人协作编辑。
类似于以下这个表格。
工作区: 就是电脑里的文件夹
暂存区: 下图的stage就是暂存区,add之后首先将文件的修改存在这里
版本库: 创建版本库的时候,自动创建master分支
安装好Git后,设置用户信息
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"
创建版本库
//切到指定目录
$ git init
添加文件到暂存区
git add readme.txt //可以多次把修改过的文件添加到暂存区
一次性将暂存区所有文件提交文件到仓库
$ git commit -m "注释"
通过git log命令查看历史版本
$ git log
//HEAD指的是当前版本 HEAD^就是上一个版本 HEAD^^就是上上次版本
//HEAD~100就是前100次版本
$ git reset --hard HEAD^
当我们回退版本后,后续版本使用git log是看不到了,但这不意味着说无法版本前进。可以使用$ git reflog,这个命令记录了每一次的命令
$ git reflog
e475afc HEAD@{1}: reset: moving to HEAD^
1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
e475afc HEAD@{3}: commit: add distributed
eaadf4e HEAD@{4}: commit (initial): wrote a readme file
这个时候有了版本的id,就可以再次穿梭到未来。
$ git reset --hard 1094a //只需要输入前几位id
暂存区管理的是修改,如果文件修改后,不添加到暂存区,直接提交到仓库,这样实际上并没有提交到仓库中。
撤销修改
$ git checkout -- readme.txt
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
删除修改
直接在工作区把文件删除了。有两种情况,一误删,二确实要删除。
误删:
$ git checkout -- readme.txt //会把误删的文件从仓库里拷贝一份到工作间
删除仓库里的文件,rm先删除,再提交。
$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
[master d46f35e] remove test.txt
1 file changed, 1 deletion(-)
delete mode 100644 test.txt
使用GitHub,码云等仓库托管网站,在远程建立一个仓库。
本地版本库关联远程库
$ git remote add origin <远程库地址>
//将本地仓库的数据推送到远程库
$ git push -u origin master
克隆远程库
$ git clone <远程库地址>
每个分支都是一条独立的时间线,互不影响。
git用HEAD指针指向当前分支,一开始默认指向master
分支可以保证自己独立工作,等到自己工作完成再合并到主分支,安全又不影响别人工作。
查看分支:git branch
创建分支:git branch
切换分支:git checkout
创建+切换分支:git checkout -b
合并某分支到当前分支:git merge
删除分支:git branch -d
合并分支
当出现合并冲突时就需要手动进行解决冲突后再进行提交。
$ git merge feature1
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt //readme.txt出现合并冲突
Automatic merge failed; fix conflicts and then commit the result.
``