GitHub使用方法入门基础

分支与合并

Git的分支可以让你在主线(master分支)之外进行代码提交,同时又不会影响代码库主线。分支的作用体现在多人协作开发中,比如一个团队开发软件,你负责独立的一个功能需要一个月的时间来完成,你就可以创建一个分支,只把该功能的代码提交到这个分支,而其他同事仍然可以继续使用主线开发,你每天的提交不会对他们造成任何影响。当你完成功能后,测试通过再把你的功能分支合并到主线。

分支

  • 一个Git仓库可以维护很多开发分支。现在我们来创建一个新的叫 experimental的分支:

  • 运行git branch命令可以查看当前的分支列表,已经目前的开发环境处在哪个分支上:

  • experimental 分支是你刚才创建的,master分支是Git系统默认创建的主分支。星号标识了你当工作在哪个分支下,输入git checkout 分支名可以切换到其他分支:

  • 切换到experimental分支,切换完成后,先编辑里面的一个文件,再提交(commit)改动,最后切换回 “master”分支:

查看下file1中的内容会发现刚才做的修改已经看不到了。因为刚才的修改时在experimental分支下,现在切换回了master分支,目录下的文件都是master分支上的文件了。

  • 现在可以在master分支下再作一些不同的修改:

这时,两个分支就有了各自不同的修改,分支的内容都已经不同,如何将多个分支进行合并呢?

  • 可以通过下面的git merge命令来合并experimental到主线分支master:

-m参数仍然是需要填写合并的注释信息。

由于两个branch修改了两个不同的文件,所以合并时不会有冲突,执行上面的命令后合并就完成了。

  • 如果有冲突,比如两个分支都改了一个文件file3,则合并时会失败。首先我们在master分支上修改file3文件并提交:

  • 然后切换到experimental,修改file3并提交:

  • 切换到master进行合并:

  • 合并失败后先用git status查看状态,会发现file3显示为both modified,查看file3内容会发现:

上面的内容也可以使用git diff查看,先前已经提到git diff不加参数可以显示未提交到缓存区中的修改内容。

  • 可以看到冲突的内容都被添加到了file3中,我们使用vim编辑这个文件,去掉git自动产生标志冲突的<<<<<<等符号后,根据需要只保留我们需要的内容后保存,然后使用git add file3和git commit命令来提交合并后的file3内容,这个过程是手动解决冲突的流程。

  • 当我们完成合并后,不再需要experimental时,可以使用下面的命令删除:

git branch -d只能删除那些已经被当前分支的合并的分支. 如果你要强制删除某个分支的话就用git branch –D

撤销一个合并

  • 如果你觉得你合并后的状态是一团乱麻,想把当前的修改都放弃,你可以用下面的命令回到合并之前的状态:

推送至远程仓库

  • 在本机完成改动后就可以提交到远程仓库了

可以把 master 换成你想要推送的任何分支。

  • 如果你还没有克隆现有仓库,并欲将你的仓库连接到某个远程服务器,你可以使用如下命令添加:

如此你就能够将你的改动推送到所添加的服务器上去了。

更新与合并

  • 要更新你的本地仓库至最新改动,执行:

以在你的工作目录中 获取(fetch) 并 合并(merge) 远端的改动。

  • 要合并其他分支到你的当前分支(例如 master),执行:

  • 在这两种情况下,git 都会尝试去自动合并改动。遗憾的是,这可能并非每次都成功,并可能出现冲突(conflicts)。 这时候就需要你修改这些文件来手动合并这些冲突(conflicts)。改完之后,你需要执行如下命令以将它们标记为合并成功:

  • 在合并改动之前,你可以使用如下命令预览差异:

参与评论