1.创建版本库
2.版本创建与回退
3.分支管理
4.使用github
5.使用git
1. 创建版本库
本文基于linux系统。首先是安装git:
sudo apt-get install git
假如我想要通过git来管理某一目录下的代码,首先要创建一个版本库(通过git init
命令,目录下将会多出一个文件.git
),git将借助.git
管理该目录下的代码:
mkdir git_study
cd ./git_study/
git init
2. 版本创建
(1)创建一个版本
在git_study/
目录下创建一个代码文件,假设我们要管理这个代码文件,通过下述命令创建一个版本,v1是指版本信息,自己填写:
git add test.txt
git commit -m 'v1'
(2)查看版本记录
git log
(3)版本回退
在创建新版本时,并不是拷贝了一份前面版本,而是基于前面的版本进行修改,并记录。当前版本由
HEAD
指向,前一版本为HEAD^
或HEAD~1
,前二版本为HEAD^^
或HEAD~2
,其他类推。版本回退命令为:
git reset --hard HEAD^
回退后,版本2并没有删除,可根据版本编号回到版本v2:
git reset --hard 74898339a5bb14980d902ca5e72adc84196a3af2
如果命令窗口关闭,找不到版本编号,则使用git reflog
可找到操作记录
(4)工作区和暂存区
①工作区:指电脑中的目录,即需要git来管理的目录,如前述git_study/
②版本库:工作区内的隐藏目录.git
现对工作区做如下修改:修改test.txt文件,创建新文件test2.txt,通过
git status
命令查看git工作状态,得到如下提示(修了文件,有一个文件未跟踪):通过
git add test.txt test2.txt
命令(后面可跟多个文件名或目录名),将文件添加到暂存区后,即可创建新版本,一旦提交创建新版本后,将会获得干净的工作区(status内无内容)
(5)管理修改
git创建版本时只会提交暂存区的修改,即所有的修改要先提交到暂存区,否则不会变更到新版本中。
(6)撤销修改
通过命令git checkout -- test.txt 来撤销工作区的改动(撤销的是指作出了修改,但未提交到暂存区)。
如果已经加入到暂存区,则通过命令git reset HEAD test.txt来取消暂存,回到提交暂存之前(文件已修改,但未提交暂存,status显示有修改为提交暂存)。
(7)对比文件的不同
①对比工作区文件和版本的不同,首先对工作区中文件进行修改,但不提交到暂存区,比较该文件与版本不同,通过命令git diff HEAD -- test.txt
实现:
②对比两个版本之间的区别,命令
git diff HEAD HEAD^ -- test.txt
:注:比较的基准是diff 后面跟的这个版本,加号表示相对这个版本多出什么,减号则代表少了什么。
(7)删除文件
当将工作区文件删除时,git status将会改变,提示通过git add/rm 文件名
来将删除操作更新至暂存区,或git checkout -- 文件名
来撤销删除操作;如果已将删除更新至暂存区,想要撤回则通过前述撤销修改操作来撤销删除。如果确认删除则创建新版本。
3. 分支管理
(1)基本操作
当创建一个属于自己的分支,别人看不到,还在原来的分支上正常工作,而你在自己的分支上工作,想提交就提交,不会影响到别人干活,直到开发完毕后再一次性合并到原来的分支上。前述的操作都是在一个分支上进行操作的,这条分支叫主分支(master)。严格来说,HEAD是先指向分支,由分支再指向版本。
在创建分支时,先创建了一个指针指向版本,master指向版本不动,但你的HEAD将指向分支,当你作出修改时,创建的分支向新版本移动,master依然保持不变。当合并时,则将master指向了创建的分支所指向的版本,然后删除创建的分支即可。
①查看有多少分支命令:git branch
②创建一个新的分支(假设名为dev),并切换到该分支上:git checkout -b dev
,当再修改工作区并创建新版本时,将是在dev分支上进行:
③切换分支:
git checkout master
,此时再查看操作记录时,将不会有dev的版本记录④将dev合并到主分支:
git merge dev
,如果允许将以快速合并的方式进行(但不是所有的都可以快速合并,后面叙述):⑤删除dev分支:
git branch -d dev
(2)合并分支冲突的解决
如果在创建新分支后,在新分支上作出修改,然后跳回主分支,但没合并,而是在主分支上又提交了一个版本,此时如果直接将dev分支合并到主分支将会出现冲突问题:
(3)分支管理策略
通常,合并分支时,如果可能,git会以快速合并的模式来合并,但有些快速合并虽然不冲突,但也不能成功,此时git会自动做一次新的提交,但是在删除分支后会丢失分支信息。
如在dev分支中创建新文件,在master分支中对另外一个文件进行修改,此时是不冲突的,直接合并将弹出下拉框,想要在下拉框中输入版本描述信息:
禁用快速合并:git merge --no-ff -m '描述‘ dev
(4)bug分支
如果当你在自己的分支上进行工作时,此时需要修复主分支的bug时,但此时你的工作还未完成,不能提交合并。如果查看status时,发现有修改未提交,那么需要通过命令:
git stash
将你的工作保存起来,此时status是干净的,再去切换到主分支进行修复,修复合并完成后,再跳回你的工作分支,通过命令git stash list
列出之前保存的工作,通过git stash pop
将工作还原。
4.使用github
(1)github创建仓库
首先在github创建一个账号登录,选择新建仓库:
(2)github添加SSH
如果需要某台电脑与github上的仓库进行交互,那么需要把这台电脑的ssh公钥添加到这个github账户。
初次配置git用户名和密码时,通过下述命令来配置:
git config --global user.name "your user name"
git config --global user.email "your user email"
如果已有,需要修改或查看,在家目录下通过命令 vim .gitconfig
来编辑
然后通过下述命令来生成ssh:
进入.ssh/文件夹,可以看到生成了两个文件,分别为私钥和公钥:
最后通过cat查看公钥,复制公钥到github网站设置里:
(3)github克隆项目
通过命令执行克隆:
git clone 项目地址
如果克隆出错,执行下述命令后再克隆:
eval "$(ssh-agent -s)"
ssh-add
(4)github推送代码
项目代码克隆完成后,一般不是直接开发,而是创建一个新的分支进行开发,当开发完成后,需要将你工作推送到github则执行:
git push origin 你的分支名称
(5)将本地分支跟踪服务器分支
用于比较两个分支是否有差异
git branch --set-upstream-to=origin/远程分支名称 本地分支名称
git status
(6)拉取服务器分支代码
git pull origin 远程分支名称
git status