1、HEAD指针:这个指针可以在任何的分支和版本中移动,通过移动指针,可以将项目还原到任何版本。
查看指针当前位置:
git reflog
...HEAD@{0}:... #{0}就代表HEAD指针的当前位置
git reset --hard 12c5 #回到版本号为12c5的版本
2、Git分支:分支可以把项目的开发按照某种方式分成多条路线,每一条路线互不影响,路线还可以进行合并。
常见分支:
master:主分支,代码的核心
develop:最新开发成果的分支
release:为了发布新产品而设置的分支
hotfix:为了修复bug二设置的分支
feature:为了开发新功能而设置的分支
操作:
git branch sda1 #创建了一个名为sda1的分支
git branch -v #查看所有分支
git status #查看git状态,也可以查看当前分支
git checkout sda1 #切换到sda1分支
#分支的合并:
如果想要把sda1合并到master分支中,需要切换到master分支当中,然后在合并
git check master #切换到master分支中
git merge sda1 #把sda1分支和master合并
如果想要把master和sda1合并,需要切换到sda1当中,然后再合并
git check sda1 #切换
git merge master #合并
合并冲突:(多个分支修改了相同的地方之后合并)
假设现在有两个分支:sda1、master,现在对这个两个分支下面的a.txt文件进行修改,
如果master中修改了第10行,sda1中修改了第15行,这样是可以进行merge的,
如果master中修改了第10行,sda1中也修改了第10行,这样进行merge就会产生冲突,
如果发生了合并冲突, git会把修改的内存都存入文件,并且给出报错信息
###冲突一定要人为去解决,机器是不能够解决的
下面模拟一下冲突:
git ckeckout sda1 #切换到sda1分支
echo aaa > a.txt #创建一个名为a.txt的文件
git add . #提交到暂存区
git commit -m "aaa" #提交到sda1分支的本地git
git checkout master #切换到master分支
echo bbb > x.txt #创建一个名为a.txt的文件
git add . #提交到暂存区
git commit -m "aaa" #提交到master分支的git
git merge sda1 #合并分支,会出现错误
3、Git服务器:(给用户提供不同的访问方式)
git可以使用ssh协议、git协议、http协议向客户机提供仓库。
其中shh、git协议需要客户机安装git软件包
git、http协议只能进行clone操作,无法进行push操作
1°ssh方式:(通过公钥私钥实现免密)
ssh-keygen -f /root/.ssh/id_rsa -N '' #产生公钥私钥,-f指定私钥位置,-N指定密码
ssh-copy-id root@192.168.4.5 #公钥发送给服务器
#ssh免密登录在rsync数据同步的时候也有用到
git init --bare /var/git/project #服务器操作,初始化一个空git仓库
git clone root@192.168.4.5:/var/git/project #客户机操作,克隆仓库
2°git协议:
在服务器上安装git-daemon
yum -y install git-daemon
git init --bare /var/git/project #初始化一个空git仓库
vim /usr/lib/systemd/system/git@.service #修改配置文件,/usr/lib/systemd/system/*service 一般使用systemctl管理
[Service]
User=...
ExecStart=... --base-path=/var/git ... #共享git仓库
重启服务:systemctl restart git.socket
git clone git://192.168.4.5/project #访问
3°http协议:
yum -y install httpd gitweb
修改配置文件:
vim /etc/gitweb.conf
添加$projectroot = "/var/git" #指定git仓库目录,如下图
重启httpd服务:systemctl restart httpd
浏览器访问:192.168.4.5/git,如下图
写总结的第二十三天!!!