Git09-合并

发布时间 2023-03-23 16:02:51作者: 麦恒
  • Git是一个分布式版本控制系统(Distributed Version Control System,DVCS)。例如,它允许日本的一个开发人员和新泽西州的一个开发人员独立地制作与记录修改,而且它允许两个开发人员在任何时候合并变更,不需要一个中心版本库。
  • 一次合并可以结合两个或多个分支。但是大多数情况下,一次合并只结合两个分支。
  • 在Git中,合并必须发生在一个版本库中——也就是说,所有要进行合并的分支必须在同一个版本库中。版本库中的分支是怎么来的并不重要(Git提供了引用其他版本库和下载远程分支到当前工作目录的机制)。
  • 当一个分支中的修改与另一个分支中的修改不发生冲突的时候,Git会计算合并结果并创建一个新提交来代表新的统一状态。但是当发生冲突时,Git并不解决冲突冲突通常是对同一个文件的同一行进行修改了)。相反,Git把这种争议性的修改在索引中标记为“未合并”(unmerged),留给开发人员来处理。当Git无法自动合并时,你需要在所有冲突都解决后做一次最终提交。

1、合并示例

1.1、为合并做准备

  • 在开始合并之前,最好整理一下工作目录。
  • 在正常合并结束的时候,Git会创建新版本的文件并把它们放到工作目录中。此外,Git在操作的时候还用索引来存储文件的中间版本
  • 如果已经修改了工作目录中的文件,或者已经通过git add或git rm修改了索引,那么版本库里就已经有了一个脏的工作目录或者索引。如果在脏的状态下开始合并,Git可能无法一次合并所有分支及工作目录或索引的的修改。
    • 提示,不必从干净的目录启动合并。例如,当受合并操作影响的文件和工作目录的脏文件无关的时候,Git才进行合并。但是,如果每次合并都从干净的工作目录和索引开始,那么关于Git的操作将会容易得多。

示例1-1:

1、创建一个新版本库

//(1)添加用户配置
]# git config --global user.email "hengha@123.com"
]# git config --global user.name "heng ha"
 
//(2)初始化一个新的版本库
]# mkdir merge-example
]# cd merge-example/
]# git init

2、在master分支中创建一个提交

//创建文件file1
]# cat > file1 << EOF
Line 1 stuff
Line 1 stuff
Line 1 stuff
EOF

]# git add file1
]# git commit -m "Initial 3 line file1"

3、创建一个新分支

]# git branch alternate

1.2、合并两个分支

  • 现在有两个分支了,每个分支都有不同的开发工作。

示例1-2:

1、在master分支中创建一个新文件file2

//创建文件file2
]# echo "Here is stuff on file2" > file2

]# git add file2
]# git commit -m "Initial 1 line file2"

2、在alternate分支中修改file1

//(1)查看分支的历史提交
]# git show-branch
! [alternate] Initial 3 line file1
 * [master] Initial 1 line file2
--
 * [master] Initial 1 line file2
+* [alternate] Initial 3 line file1

//(2)检出到alternate分支
]# git checkout alternate

//(3)修改文件file1
]# echo "Line 4 alternate stuff" >> file1
]# git add file1
]# git commit -m "Add alternate’s line 4 in file1"

3、合并两个分支

  • 在master分支中添加了文件file2,在alternate分支修改了文件file1。因为这两个修改并不影响相同文件的相同部分,所以合并应该会顺利进行,不会发生事故。

1