![9dd07b3bfa4ca3c1ff8b24d6ca6e7c29.png](https://i-blog.csdnimg.cn/blog_migrate/d61b5f63600f65e2166d0ed3833db4ac.jpeg)
新建工作区
首先先新建一个工作区
mkdir demo
cd demo
git init # 初始化
![68f4a8b74c3cdcde9b873f8e9658a0ff.png](https://i-blog.csdnimg.cn/blog_migrate/8c3e2e6378a982ee39fa64525b33bac9.png)
添加一个 test.txt
文件,并在里面添加 这是版本v1.0
vim test.txt # 新建一个test.txt文件并用vim打开编辑
添加test文件到暂存区
git add test.txt
提交文件到本地仓库中,并打上tag
git commit -m "这是v1.0"
git tag -a v1.0 -m "这是1.0版本"
可以使用以下命令来查看所有tag
git tag
也可以查看某个tag的详情
git show v1.0 # v1.0是刚刚给commit打上的tag
![710999eb33cb29cf90f886e10dbd2fbb.png](https://i-blog.csdnimg.cn/blog_migrate/bfeb5f61eb1eb6a521eb428e12b8da95.jpeg)
提交第二、第三次版本
在第二次版本中给test.txt
加上:这是版本v2.0 这句话,然后提交以及为本次提交打上tag
![03671b156557bb22c1dcb6a84e979599.png](https://i-blog.csdnimg.cn/blog_migrate/509eac98f2d1366e669176961b34810e.png)
在第二次版本中给test.txt
加上:这是版本v3.0 这句话,然后提交以及为本次提交打上tag
此时的test.txt
文件内容为
![9b4f957754e34b95bc55399e2185a8b9.png](https://i-blog.csdnimg.cn/blog_migrate/a6ff6d3e8b2dc32b22eca60f8700ae1f.png)
可以使用 git log
查看 提交的历史记录
![b9a4fa56ff3dfb621f6207e76dd1c30d.png](https://i-blog.csdnimg.cn/blog_migrate/1cc6db7699f34d184c1e2b0aa417f8ba.jpeg)
就可以很清晰的看出提交的历史和对应的tag,其实tag只是对某次提交记录起了一个别名
版本回退
比如我们在版本v1.0中出现了bug需要修复,我们需要回退到版本1的代码中,那么流程应该是:
- 1. 获取v1.0时的 commit id,根据id回退版本
- 2. 将回退的版本新建一个分支,master分支返回最新的版本
- 3. 修复bug,然后将bug修复后的分支合并到master分支
那么开始第一步,回退版本
使用 git show v1.0
就可以查看 v1.0
时提交的详情了
![710999eb33cb29cf90f886e10dbd2fbb.png](https://i-blog.csdnimg.cn/blog_migrate/bfeb5f61eb1eb6a521eb428e12b8da95.jpeg)
其中a40c5c8f6c29f44d09946689e8011865237ee836
就是commit id
我们只需要获取前6位即可,git会自动识别获取完整的id
使用以下命令来回滚到v1.0
# git reset --hard [commit id]
git reset --hard a40c5c
![bde15f871ba16a01d00a176bd3070e9e.png](https://i-blog.csdnimg.cn/blog_migrate/2b3a514bef85545e24ef763b6e86db23.png)
此时就已经是版本1时候的代码了
开始第二步,新建分支
使用以下命令新建分支并切换到该分支
# git checkout -b [branch-name]
git checkout -b bugfix
使用 git checkout master
返回 master
分支
然后再用 git log
发现只有一次提交记录
![b005162131375c4d353b30320064c4a6.png](https://i-blog.csdnimg.cn/blog_migrate/f58d5c7db99fb1195be957b7cb699ba5.png)
这是因为这时候版本回退了,目前是版本1,git log
是查不到第三次提交记录的,需要使用这个命令
git reflog
![104875ead9fdd7d51e4f52a16ef63c2d.png](https://i-blog.csdnimg.cn/blog_migrate/1e9513cf91e7774b5cf73688660f9342.jpeg)
可以看到所有的操作记录都显示出来了,前面的字符串就是操作id
回到版本三的代码
git reset --hard 936f006
![644d91a43ce55a2d2876c798c79b6a4e.png](https://i-blog.csdnimg.cn/blog_migrate/7b91541384c372991c1ab904a37d0490.png)
可以看到已经回到了版本三中了
最后是第三步,修复bug,然后合并分支
首先切换到bugfix
分支
git checkout bugfix
然后编辑test.txt文件,暂时就添加一条:修复版本1bug
![64e690878cd7a356e0d682916234fdd2.png](https://i-blog.csdnimg.cn/blog_migrate/819fec88489ef5d95af00ec098bcf4e1.png)
接着提交到本地仓库中
git add test.txt
git commit -m "修复版本1中的bug"
git tag v1.1
合并分支
git checkout master # 切换到master分支
git merge bugfix # 将bugfix分支合并到master分支
![0956044812dbee12ad2f477ea1b2a2e7.png](https://i-blog.csdnimg.cn/blog_migrate/84f3233f9f7c6cec3f22042637efea3a.jpeg)
红色高亮的说明了都修改了test.txt
文件,现在再看一下合并后的test.txt
文件内容是什么样的
![318ac2f425ba9bc59efc958f04e7aab7.png](https://i-blog.csdnimg.cn/blog_migrate/2fcf86bfd913b8f3e22a8b250c40137e.png)
其中:
<<<<<<
Head和======
之间是当前分支master
的内容======
与>>>>>>>bugfix
之间是bugfix
分支的内容
把这些符号去除就解决了冲突了
![b98f3d6289cc4c58e35031a116872c6a.png](https://i-blog.csdnimg.cn/blog_migrate/ca9d72cb2399c263d3d5e35cf87876f4.png)