11.1 Git 中的分支
在 Git 中处理分支 (branches)
是版本管理的一个
关键方面,允许在一个仓库中并行进行多条开发线。分支让 Git 成为一个强大的工具,
用于协作、实验以及管理项目的不同版本。
你可以把 Git 中的分支看作是文件夹,Git 将你的项目复制到这些文件夹中。你的项目有一个主文件夹
在你的 本地仓库
—— master
。Git 可以创建这些文件夹的副本,
这样你可以进行实验,而不用担心破坏主分支的稳定代码。这些副本文件夹被称为 分支 —— branches
。
分支就是代码的替代版本。假设你想在一个大项目中做一些改动或进行一个 不确定的实验。如果没有 Git,你会怎么做?
你可能会将项目复制到一个新文件夹中并在那里尝试所有更改。如果结果满意,你可以将 它复制回主文件夹;如果不满意,就遗忘它,或者干脆删除掉。
让我们来看一个生活中的例子,比如写书:
- 你有一本书稿(主分支)。
- 你决定尝试修改结尾(创建新分支)。
- 你在一个单独的文件中写下新的结尾(在新分支中工作)。
- 如果新的结尾更好,你将它替换掉书稿中的旧结尾(分支合并)。
- 删除包含新结尾的文件(删除分支)。
11.2 创建分支
在 PyCharm 中创建分支非常简单。
输入分支的名称。
PyCharm 会立即在菜单顶部显示当前分支的名称:
之前是怎样的呢?
之前显示的是你的第一个也是主分支的名称 —— master
。
现在显示的是 test
,这意味着 Git (由 PyCharm 指导)
不仅创建了一个新分支,还立即切换到它。
在当前分支 (test)
的文件 main.py
中添加一些代码,
然后提交(commit)它。
11.3 在分支之间切换
步骤 1. 选择分支。
现在我们来切换到我们的旧分支。点击顶部菜单,这里可以看到什么呢?
不要困惑 —— 一切都很简单:
Local
——这是你本地 git 仓库的分支列表;这里有两个:
test
master
Remote
—— 这是你在 GitHub 服务器上的远程仓库。
我们已经把你的更改发送到那里,但没有新分支,正如预期的那样。
远程仓库名为 origin,并且那里只有 master
分支。
Recent
——这是你最近处理过的分支名称列表。
这是为方便和快速而在 PyCharm 中添加的。
本地仓库名称右侧的 origin/master
—— 是与之同步的
远程仓库的名称,变更将发送至那里。
步骤 2. —— 将分支代码下载到当前文件夹。
步骤 3. 验证:。
我显示的是分支 (master)
和旧代码。
11.4 分支合并
现在我们试试将我们的两个分支的代码合并。
步骤 1. 首先在我们的项目中添加一个新文件 —— init.py 并编写一些代码。
- 创建文件 init.py
- 在其中写入代码 print("你好")
- 提交文件。
这是我在 master
分支中的两个文件的样子:
步骤 2. 分支合并。
我们将把在 test
分支中做出的更改合并到我们的当前分支
(master)
中。
为此,我们也可以使用顶部菜单中的 «Merge ‘test’
into ‘master’»
命令。
步骤 3. 验证结果:。
检查:
- 顶部仍然显示分支
master
- 我们有两个文件:init.py 和 main.py
-
文件 main.py 包含在
test
分支中添加的代码。
11.5 合并冲突
有时候在合并分支时会出现冲突。
如果你在不同的分支中修改了一个文件并尝试合并它们,可能会出现冲突。
文本文件的冲突
Git 是一个非常智能的系统,它了解文件类型。如果你在它认为是 文本文件的不同位置进行了更改,Git 会在必要的地方将更改从一个文件合并到另一个文件中, 就像人类一样。
二进制文件的冲突
但如果你修改了图片或文档,Git 不会尝试将它们的部分合并到一个文件中, 它只会建议你选择你想在当前分支中保留的文件版本。
手动解决冲突:
如果你在文本文件的相同位置做了更改,Git 无法正确合并不同版本, 它会建议你来解决。
这可能会看起来像这样:
你在这里看到什么:
- 左边是 master 分支的 main.py 文件内容
- 右边是
test
分支的 main.py 文件内容 -
中间是 PyCharm 提议你编写最终代码版本的位置
(你可以点击
«>>»
和«<<»
按钮, 以自动插入来自其中一个文件的更改)。
我接受了 master
的版本并手动补充了代码。这是我得到的结果。
11.6 变更历史
其他有用和有趣的功能:你可以查看任何文件的变更历史,点击 Show
History
按钮。它可能有两个位置 —— 找到它。
这是我对于 main.py 文件的变更历史的样子:
说明:
-
左边是具体文件的变更历史:
- 变更越新,它越高;变更越旧,它越低。
- 在这里也会显示分支的合并历史。
- 右边 —— 是具体提交中所做的更改。
GO TO FULL VERSION