目录
一、git管理过程的四个阶段
1、工作目录
工作目录的内容就是当前正在编辑的项目文件。
2、暂存区(index)
index区标记了当前工作目录中,哪些内容是被git管理的,既通过"add" 命令添加的文件。
3、本地仓库
而本地仓库保存了对象被提交 过的各个版本,比起工作目录和暂存区的内容,它要更旧一些。
4、远程仓库
远程仓库是本地仓库的异地备份,远程仓库的内容可能被分布在多个地点的处于协作关系的本地仓库 修改,因此它可能与本地仓库同步,也可能不同步,但是它的内容是最旧的。
任何对象都是在工作目录中诞生和被修改,任何修改都是从进入index区才开始被版本控制,只有把修改提交到本地仓库,该修改才能在仓库中留下痕迹,而要与协作者分享本地的修改,可以把它们push到远程仓库来共享。
反过来,我们可以从远程历史仓库中获得本地仓库的最后一个版本,clone到本地,从本地检查出对象的各个版本到index暂存区或工作目录中,从而实现任何对象或整个仓库的任意阶段状态的“回滚”。
二、git常用命令
1、创建版本库
git clone #克隆远程版本库
git init #初始化本地版本库
2、修改和提交
git status #查看状态git diff #查看变更内容
git add . #跟踪所有改动过的文件
git add #跟踪指定的文件
git mv #文件改名
git rm #删除文件
git rm --cached #停止跟踪文件但不删除
git commit -m "commit message" #提交所有更新过的文件
git commit --amend #修改最后一次提交
3、查看提交历史
git log #查看提交历史
git log -p #查看指定文件的提交历史
git blame #以列表方式查看指定文件的提交历史
4、撤消
git reset --hard HEAD #撤消工作目录中所有未提交文件的修改内容 git checkout HEAD #撤消指定的未提交文件的修改内容
git revert #撤消指定的提交
5、分支与标签
git branch #显示所有本地分支git checkout #切换到指定分支或标签
git branch #创建新分支
git branch -d #删除本地分支
git tag #列出所有本地标签
git tag #基于最新的提交创建标签
git tag -d #删除标签
6、合并与衍合
git merge #合并指定分支到当前分支
git rebase #衍合指定
分支到当前分支
7、远程操作
git remote -v #查看远程版本库信息git remote show #查看指定远程版本库信息
git remote add #添加远程版本库
git fetch #从远程库获取代码
git pull #下载代码及合并
git push #上传代码及合并
git push: #删除远程分支或标签
git push --tags #上传所有标签
三、git冲突及解决办法
1、git冲突的原因
当不同的人更改同一份文件时,如果这些更改不重叠(即对不同的代码行进行了更改),则会自动合并冲突的文件;如果同一行受到影响,则Git不能随意选择另一方,并要求您解决冲突。
2、git冲突的解决办法
-
git冲突的解决办法有很多,一般解决流程:
-
拉取远端代码。存在冲突,会报错;
-
此时我们需要将本地代码暂存起来 stash;
-
更新本地代码,将本地代码版本更新和远端的代码一致即可;
-
将暂存的代码合并到更新后的代码后,有冲突解决冲突(需要手动进行解决冲突);
-
提交解决冲突后的代码。
四、git flow工作流
利用Git工作流进行标准化处理,统一的拉分支规则,统一的上线流程,让整个团队所有人员按照统一的标准进行工作,从而提高我们代码管理及其上线的效率。
Gitflow工作流是目前非常流行的一种比较成熟的工作流。该工作流的具体实例图形如下图所示:
如上图所示,我们可以看到,Gitflow工作流把整个代码分支分成了Master分支,Hotfix分支,Release分支,Develop分支,Feature分支。各个分支的作用及其交互为:
-
Feature分支:我们每当要迭代一个新功能,就需要来创建一个feature分支。该功能的所有代码都在该feature分支上维护。feature分支代码从Develop分支上拉取;并且,代码也会push回Develop分支;
-
Develop分支:是我们的开发分支。所有的开发人员在一个迭代周期中,都是从develop分支去拉取代码,然后功能开发完成,就check in回develop分支。当某个迭代周期完成,我们需要从develop分支上把可以发布上线的功能拉取到Release分支进行上线;
-
Release分支:当一个迭代周期完成,我们需要从develop分支拉取可以上线的功能到release分支。一旦release分支拉取功能确定,在上线之前,任何人都不可以再往release分支上提交代码。在release分支上进行提测,上线后,合并到master分支;
-
Master分支:对应上线功能的代码版本,它是最稳定的代码分支;
-
HotFix分支:如果线上系统出现了bug,我们需要从master分支拉取一个新分支,也就是hotfix分支,在该分支上解决bug,并且校验bug,然后从该分支上线。
五、linux搭建git服务器
1.安装git
$ yum install -y git # 建议root用户下执行命令,其中-y表示安装过程提示选择全部为yes
$ git --version # 验证git是否安装成功
2.创建一个git用户
$ adduser git # 创建账户
$ passwd git # 修改密码
3.创建证书登录:
$ cd /home/git #切换到git账号,创建.ssh文件和authorized_keys文件 $ mkdir .ssh
$ cd /home/git/.ssh
$ vi authorized_keys
之后把本机上的id_rsa.pub中的公钥复制到authorized_keys文件中,如果没有公钥请在用户主目录使用命令生成:
Windows系统:C:\Users\用户名
Linux系统:/home/用户名
Mac系统:/Users/用户名
$ ssh-keygen -t rsa
然后在用户目录/.ssh/下查看有没有id_rsa和id_rsa.pub
4.创建仓库
$ cd /home/git/ $ git init --bare test.git
$ chown -R git:git test.git
$ ls -al #查看用户组和用户名是否都为git
5.禁用shell登录
出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
6.服务器打开RSA认证
在下面两个文件中找到3个地方处修改
$ vi /etc/ssh/ssh_config$ vi /etc/ssh/sshd_config
1.RSAAuthentication yes 2.PubkeyAuthentication yes
3.AuthorizedKeysFile .ssh/authorized_keys
7.客户端测试
在本机克隆远程仓库
$ git clone git@your ip address:/home/git/test.git$ touch readme.txt
$ git add .
$ git commit -m "the first commit"
$ git remote add origin git@your ip address:/home/git/test.git
$ git push origin master
如果需要密码,就是公钥没有配置成功或者RSA没有开启。
来源:CSDN
作者:爱闹腾
链接:https://blog.csdn.net/weixin_39032726/article/details/104632502