第三节 git实战

在日常工作中,使用git时仍有许多疑惑之处,旨在通过一个简单的实战项目帮助自己进行记忆。

1. 新建git仓库 actual-combat

-- 新建文件夹actual-combat
mkdir actual-combat
-- 切换到actual-combat目录下
cd actual-combat
-- 将文件夹设为git仓库
git init
-- 创建测试文件
touch test.txt

在这里插入图片描述
2. 修改test文件,增加一句话
在这里插入图片描述
在master分支提交test修改

-- 首先查看变更文件
git status
-- 加入缓存区
git add test.txt
-- 提交
git commit -m "master分支第一次提交测试"
-- 再看git状态
git status

在这里插入图片描述
3. 创建开发分支dev,并切换到dev分支

-- 创建开发分支dev,并检出(这时dev的内容和master一致)
git checkout -b dev 
-- 等价于 
git branch dev
git checkout dev

-- 或者
git switch -c dev

在这里插入图片描述
现在我们来模拟几种情况:

情况一:

在dev分支更改test文件,增加一句话
在这里插入图片描述
这时看下git状态:

git status

在这里插入图片描述
当前分支dev下不做任何操作,切换分支到master下:

git checkout master
-- 或者
git switch master

在这里插入图片描述
从图中可以看到,切换到分支master以后,test文件中分支dev的修改同样存在。
在这里插入图片描述
我们在master分支进行提交:

git add test.txt
git commit -m "master分支提交dev修改,第一次"

master提交完代码以后,我们应该把dev分支删除掉。因为master分支是主分支,用于系统发布,所以我们修改内容一般是再建一个开发分支dev,新建的dev分支和master一致,我们在dev上进行开发,开发完成切换到master
分支进行合并,合并完dev则无用,所以要删除分支。下次进行开发的时候重复这个动作。

-- 删除dev分支
git branch -d dev

结论:在所有分支内容都一样的情况下,如果在任意分支上进行了文件的修改,且没有进行 add 操作或者commit操作,那么这个修改是针对所有分支的,也就是在所有分支上都有效,在哪个分支提交就是哪个分支的修改。

情况二:

新建分支dev,并修改test文件。
在这里插入图片描述
这时突然接到一个紧急任务,需要去master分支上给一个bug。但是当前dev分支上的东西还没有改完,不能提交。这时我们可以先进行add,使用stash将修改的内容进行暂存。

git add test.txt
git stash

在这里插入图片描述
切换到master进行修改。

git switch master
-- 修改 test文件,提交
git add test.txt
git commit -m "分支master,进行了临时修改并进行了提交"

在这里插入图片描述
临时任务做完,回到dev分支继续开发。
先查看当前dev分支下test文件的内容情况
在这里插入图片描述
可以看见 在master临时修改的 分支master,临时插入任务进行修改并提交 和分支dev第二次修改的 分支dev,第二次修改 两句话是没有的。
我们从暂存区恢复dev第二次的修改。

-- 恢复暂存内容
git stash pop

在这里插入图片描述
可以看到内容恢复了。
如果这时我们不提交也不暂存,直接切换到master分支,是会报错的。
在这里插入图片描述
为什么在情况一的时候不报错,在情况二的时候报错呢?
因为情况一修改时,master和dev是同一个版本,内容一致。而在情况二,我们在master进行了紧急修改并进行了提交,导致现在master和dev版本不一致,所以会有冲突报错。

我们在dev分支进行提交。

git add test.txt
git commit -m "分支dev第二次修改提交"

在这里插入图片描述
我们切换到master分支进行合并。

git switch master
git merge dev

-- 合并时可以使用以下命令,这样即使分支删除,信息也不会丢失
git merge --no-ff -m "merge with no-ff" dev

果然出现了冲突:
在这里插入图片描述
这时需要解决冲突,然后在master分支进行提交,作为最终版本。
在这里插入图片描述
查看日志:

-- 查看日志的两个命令
git log --pretty=oneline
git log --graph --pretty=oneline --abbrev-commit

在这里插入图片描述
删除dev分支,流程结束。

最后

实际工作中,遇到的问题可能千奇百怪,但是我们遵循一定的原则能解决大部分问题。
实际工作中由于是多人开发,所以采用两种机制。
如远程仓库有master和dev两个分支,开发的话要克隆dev分支到本地
机制一:直接在dev分支上进行开发,每次提交代码前,先从远程仓库拉取最新的代码。(不推荐)
机制二:从本地dev分支上在检出一个分支,如:feature。在feature上进行开发,这样如果临时有紧急任务可以切换到dev分支再检出一个bug分支进行更改,更改完提交合并删除,然后在切回feature进行开发。开发完成以后,合并到dev分支并解决冲突,删除feature分支,同步代码到远程仓库。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章