版本控制工具
当前,我们学习并广泛使用的是Git,这是目前业界最流行的版本控制工具。此外,还有一个版本控制工具SVN,在某些场景我们也可能会用到。
二者区别
Git和SVN在核心架构上存在显著区别:Git属于分布式版本控制系统,而SVN则是集中式版本控制系统。为了更清晰地阐述,让我们先明确两个核心概念,一是版本库,二是工作区:
版本库:
什么是版本库,版本库就是用于存储项目历史版本
我们都知道版本控制工具都是为了保存项目历史版本而诞生的,所以他们都有一个地方存放提交记录,其中包括文件变动啊,提交人提交时间啊,备注等等,通常我们把这个地方称之为版本库。
工作区:
工作区,除了上述的版本库,我们开发人员实际编写代码的文件夹就叫做工作区。
在SVN中,版本库和工作区在文件结构上是分离的,因为SVN的版本库存放在云端服务器上。
而在Git中,版本库存放在git隐藏文件夹中,每次提交代码,相当于只是将工作区的变动记录在这个隐藏文件夹里。
合并冲突
除此之外,相比于svn,git还有一个显著的优势就是具有版本库与版本库同步功能。但是,在实现同步的时候可能会出现合并冲突问题,比如我们用git pull命令将远程仓库同步到本地仓库的时候,如果在同一行的代码做了不同修改,就会出现合并冲突的问题,本质上是因为git pull其实等价于两个命令就是git fetch和git merge,只要有git merge,就可能会出现合并冲突的问题。
简单来说就是Git 中的合并冲突通常发生在两个或更多开发者修改了同一个文件的同一部分,并且这些更改在合并时无法自动解决。
解决合并冲突
那怎么解决合并冲突呢,其实也很简单,以下是如何解决 Git 合并冲突的基本步骤:
-
识别冲突:
当你尝试合并分支(如git merge feature-branch
)时,Git 会告诉你哪些文件有冲突。 -
检查冲突文件:
打开有冲突的文件,你会看到类似以下的冲突标记:<<<<<<< HEAD 你的本地更改内容 ======= 其他人的更改内容 >>>>>>> feature-branch
其中
<<<<<<< HEAD
到=======
之间的内容是你的本地分支上的更改,=======
到>>>>>>> feature-branch
之间的内容是来自你尝试合并的分支(如feature-branch
)的更改。 -
解决冲突:
编辑文件,决定保留哪些更改,删除 Git 的冲突标记(<<<<<<<
、=======
和>>>>>>>
)。 -
标记冲突为已解决:
一旦你解决了文件中的冲突,并且确定文件现在处于正确的状态,你需要告诉 Git 这个冲突已经被解决了。Git 不会自动认为你已经解决了冲突,所以你需要使用git add
命令来标记文件为已解决。git add <conflicted-file> //你可以使用 git status 来检查哪些文件还有冲突。 git status
-
提交合并:
解决了所有冲突并标记为已解决后,你可以像平常一样提交更改。这个提交将包含合并结果以及解决冲突所做的更改。git commit -m "Merge feature-branch into master and resolve conflicts"
-
(可选)撤销合并:
如果你决定不想合并这个分支,或者遇到了太多难以解决的冲突,你可以使用git merge --abort
来撤销合并操作,这将返回到合并之前的状态。 -
(可选)使用图形界面工具:
有些开发者更喜欢使用图形界面工具(如 GitKraken、SourceTree、GitHub Desktop 等)来解决冲突,因为这些工具通常提供直观的方式来查看和编辑冲突的文件。
合并冲突是版本控制中常见的一部分,特别是在团队协作中。通过良好的沟通和代码审查,可以减少合并冲突的发生,但它们仍然可能发生。