1、当多个人一起开发,a可能开发a模块,b可能开发b模块;但是当开发完后需要提交,这两个人开发的其实是一个版本,所以我们要合并代码提交。
例如:我现在在demo用户,我需要将github的代码合并到我这,我需要点击进入我demo的分支,然后右键github选择合并他的分支到我当前分支,如图:

合并完,就可以推送上去了!
2、当用户进行新的版本的开发,但是master的项目出现了bug要修复。
我们当然不能再开发中的分支去修改,这样未经审核的代码提交会对线上的版本造成无法估计的后果,所以我们应该重新拉取master创建新的master分支,修改后合并到master。

补充方法,利用暂存(stash):
1.如果有未提交的修改,则将现场先暂存(stash)
2.创建一个新分支fixBug,专门用于解决bug
3.将fixBug分支分别合并到dev分支和master分支
4.恢复现场






多人开发时,由于修改了同一个文件,可能会有文件冲突的情况。
拉取代码时,会有冲突提示,解决完相关的冲突文件,重新提交即可。
以前刚刚接触SourceTree的时候,觉得很简单,遇到冲突了去包文件里面删掉那些明显的标记,然后在谁也不知道谁删掉了谁的文件的情况下,只要不报冲突就算是自己给自己的版本推上去了,这样明显不是SourceTree的初衷
相信很多刚入门的小朋友也遇到过,现在我们来总结下正确的操作。
首先我们来看一下,什么情况表明你的文件冲突了如图:


解决冲突先要安装 Beyond compare插件
1. 选择冲突文件(感叹号文件)->右键解决冲突->打开外部合并工具,打开工具。

注意:如果未安装会报错,请按上文安装插件并配置。
2. 冲突插件界面。

这里主要让看上边的菜单,你可以选择查看什么。
然后,在相关的版本处,选中”冲突行”,合并区默认处于合并位置,鼠标右键,选择最终冲突地方留下的内容,如图:


3. 保存会话后关闭界面,重新commit冲突解决后的文件,并推送到远程。
如果冲突非常少,可以直接在右侧栏中解决冲突,如图所示:

1. 点击未暂存区域的冲突文件。
2. 右侧列表中出现冲突的内容。
3. 选择冲突内容,解决冲突,如图所示:

暂存行:表示保留该内容。
丢弃行:表示删除该内容。
备注:区分于第一种方式,使用第一种方法解决时,不要点击”未暂存文件”,否则可能无法打开冲突文件。



原则上,代码推送之前要保证本地的代码可运行,不要将不可运行或者有问题的代码推送到服务器上,如果由于误操作,将代码推送到了远程,想重新修改上传代码,此时,需要将版本进行回退,回退方法如图:

1、切换到日志/历史标签。
2、选择要恢复到的版本,如图蓝色位置。
3、鼠标右键,选择“重置当前分支到此次提交”。
4、选择”重置模式”,如图所示:

5、弹出框中选择”Yes”:

注意:请不要轻易尝试。
这张图可以很清楚的说明merge,顺带科普了cherry pick。

尽量不要使用pull,pull是一种强制将远端拉取下来,所以尽量使用fetch吧,这样才能更好的合代码。
另外,在遇到冲突时,可以进workingcopy去看看是什么文件冲突,右边会有红绿色块,并且也会有冲突标记。
在这里,你可以进行选择性discard(丢弃)不需要的代码来解决冲突。
例如当我编写代码完成,发现远端有新动态,此时的操作:
进行推送时,有时会出现如下图所示的情况:

解决方案:
首先需要在自己的GitHub上创建一个ssh keys。


打开git bash输入 ssh-keygen -t rsa -C "自己注册git的邮箱"。

由上图可以看到在c:\Users\zjq\.ssh\目录下有一个rsa.pub文件,这个文件里保存的是生成的公钥,找到它并把它填到下图:

点击Add SSH key即可。
我们此时在SourceTree里面直接点击:

此时是会出错的,必须进行配置。

选择这个选项:

选择Open ssh确定,再次点击推送。

即可发现推送已经成功了,在GitHub上就可以看到自己提交的文件。
首先打开终端,最好是从SourceTree里面打开,菜单栏有个终端按钮。然后输入:
git reset --hard HEAD^
这句话的意思是将自己最近的一次提交撤销,回到push之前的状态。但是所有commit的内容就都消失了。非常不建议用这个参数,会牺牲太多的代码。
如果不想让commit消失,可以改一下参数。用这个参数可以保证你提交的代码原封不动的保存下来。前提是你本地的工作台是干净的,把所有代码都暂存。
git reset --soft HEAD^
执行这句话之后重新拉取一遍代码就可以了,push的都会撤销回来。
如果想回退到某个指定版本,在终端中输入:
git reset --soft 1234567
注:1234567是要回退到的版本号。
版本号可以不写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。
最后总结一下:
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
第一步:创建自己的本地分支
你需要打开SourceTree,注意右侧BRANCHES,REMOTES,(如果你是第一次使用SourceTree的话,这个BRANCHES的类目下面基本上只有一个master,这个master是本地的master,REMOTES这个类目下也有一个master,这是服务器远端的master)。
关键点:我们在BRANCHES这个类目下新建一个branch。
方法如下图:

为了代码管理的方便,我们尽量遵循:
从服务器拉取其他同事的代码到本地进行merge,我们所要做的就是按照如下进行:
这样就完成了合并代码。
务必记住在开始代码编写工作前请先checkout到DEV,直到工作完成,我们来commit代码。