SourceTree使用教程

 克隆,提交,和推送(1)

      SourceTree是最好用的版本管理客户端软件,没有之一。本人将以连载经验的形式来详细讲述如何利用sourceTree去进行代码或文件的版本管理。教程一将讲述 克隆,提交,和推送。

方法/步骤


  1. 1

    在使用SourceTree之前必须要先安装Git和sourceTree,具体安装过程不再赘述,大家可以搜索其它教程。

    SourceTree使用教程(一)
  2. 2

    注册并登陆Github,点击new repository,如下图

    SourceTree使用教程(一)
  3. 3

    输入仓库名字,点击创建,创建后的仓库是空白的,如下图

    SourceTree使用教程(一)
    SourceTree使用教程(一)
  4. 4

    复制仓库地址,如下图。

    SourceTree使用教程(一)
  5. 5

    打开sourcetree,点击clone,如下图

    SourceTree使用教程(一)
  6. 6

    切换到克隆配置页面,填入远程仓库地址,目标路径(本地存放路径),点击克隆。

    SourceTree使用教程(一)
  7. 7

    打开目标路径,可以看到已克隆一个空白的版本库。

    SourceTree使用教程(一)
  8. 8

    在目标路径下新增文件test1.txt

    SourceTree使用教程(一)
  9. 9

     提交和推送。由于git是分布式版本控制工具,存在着本地仓库和远程仓库,所以我们在本地工作副本进行的编辑,要先提交到本地仓库,再从本地仓库推送到远程仓库。下面进行演示。第7步中编辑完成后,打开sourceTree, 可以看到文件的变动已经显示到软件界面,点击暂存所选,类似于勾选要提交的文件。

    SourceTree使用教程(一)
  10. 10

    输入提交注释 [A]新增1,点击提交。

    SourceTree使用教程(一)
  11. 11

    提交完成后,可以看到日志/历史选项卡中已显示提交的版本日志,在master分支 提交了新增1,不过这个master分支是本地仓库的,并不是远程仓库的。从第二张图可以看到远程仓库github里还是空白的。

    SourceTree使用教程(一)
    SourceTree使用教程(一)
  12. 12

    推送。点击推送,勾选将本地master分支推送到远程master分支,点击推送。

    SourceTree使用教程(一)
    SourceTree使用教程(一)
  13. 13

    推送完成后,可以看到最新的版本里显示了master 和 origin/master,这表明本地master分支和远程master分支是同步的,在一个节点上。登录GitHub可以看到仓库里已有提交记录了。如下图。这样本地修改的代码或文件就被同步到了远程仓库,可以被别人拉下来使用。

    SourceTree使用教程(一)
    SourceTree使用教程(一)











































































拉取和获取的区别(2)

该教程主要介绍sourceTree中拉取和获取的区别,以及在现实使用中如何去操作。

方法/步骤


  1. 1

    打开github上的GitTest版本库,编辑test1.txt文件,如下图。

    sourceTree使用教程(二)
  2. 2

    在文件test1.txt增加一行,如下图,提交。

    sourceTree使用教程(二)
  3. 3

    获取和拉取。获取是将远程仓库的代码更新到本地仓库,拉取是将本地仓库的代码更新到本地工作副本。打开sourceTree,点击 获取按钮,如下图

    sourceTree使用教程(二)
  4. 4

    点击确定,可以看到拉取图标那里多了一个蓝底白色的数字1,分支master那里也有一个灰色的数字1,并有一个向下的箭头,这表示 有一个更新需要拉取到本地工作副本。同时打开版本文件,可以看到test1.txt文件中没有第二步增加的123。

    sourceTree使用教程(二)
    sourceTree使用教程(二)
  5. 5

    点击拉取,如下图

    sourceTree使用教程(二)
  6. 6

    点击确定,可以看到待拉取的图标消失了。同时test1.txt文件也多了123

    sourceTree使用教程(二)
    sourceTree使用教程(二)
  7. 7

    一般在实际使用中是不会先点获取,再点拉取的,因为拉代码都是直接一步到位为拉到本地工作副本的。所以直接一个拉取操作就够了。

    sourceTree使用教程(二)





























创建分支和合并分支的使用方法和使用场景(3)

  该教程主要介绍sourceTree中创建分支和合并分支的使用方法和使用场景。分支是Git最大的特色之一,可以方便的进行版本部署和开发,而不互相影响。

方法/步骤


  1. 分支。当要新增一个功能,又要保证原始功能的正常的使用,这个时候为了不影响原功能的使用,就可以建立一个分支,在分支上进行新增功能的开发,等到新增的功能测试通过后再把分支合并到主干上。如下图,点击分支,输入新分支名字,以当前工作副本为基础生成一个新的develop分支。

    SourceTree使用教程(三)
  2. 2

    点击创建分支,可以看到多了一个develop分支,但是这个分支只存在于本地仓库。可以看到最新的日志记录节点上只有master , origin/master,develop,所以这个新分支是没有推送到远程仓库的。

    SourceTree使用教程(三)
  3. 3

    点击推送,如下图,勾选第一个,将本地develop分支推送到远程develop分支

    SourceTree使用教程(三)
  4. 4

    点击推送 ,如下图,可以看到本地develop和远程develop已经同步了。

    SourceTree使用教程(三)
  5. 5

    在develop分支上新增功能,这里是新增了 add func1

    SourceTree使用教程(三)
  6. 6

    在sourceTree界面,推送新增的功能到develop分支

    SourceTree使用教程(三)
  7. 7

    再提交一条新增记录,如下图。可以看到develop分支比master分支多了2条提交记录。

    SourceTree使用教程(三)
    SourceTree使用教程(三)
  8. 8

     功能1和2测试通过,现在要将develop分支上新增的两个功能合并到主分支master上。将当前分支切换到master分支,鼠标移到到develop分支,右键,选择合并develop至当前分支,也即是主分支。

    SourceTree使用教程(三)
  9. 9

    点击确定

    SourceTree使用教程(三)
  10. 10

    可以看到master的本地仓库多了两条需要推送的记录。如图所示的红框内图标2,说明develop分支新增的两个功能已合并到本地仓库的master分支。

    SourceTree使用教程(三)
  11. 11

    推送合并过来的两个新增功能。可以看到master分支已有了新增的两个功能。

    SourceTree使用教程(三)










































冲突解决(4)

虽然在团队协作开发中强调尽量避免操作同一文件,以避免冲突,但是在实际开发中还是会遇到冲突,所以掌握解决冲突的方法必不可少。

方法/步骤


  1. 1

    解决冲突就要先制造冲突,冲突一般是由于两个人同时修改同一文件而造成的。在GitHub上修改远程仓库文件模拟一个人操作,sourceTree本地修改同一文件模拟另一个人操作。

    SourceTree使用教程(四)---冲突解决
  2. 2

    登录GitHub ,打开GitTest,编辑test1.txt文件

    SourceTree使用教程(四)---冲突解决
  3. 3

    在文件末尾增加 内容 code conclick1,点击提交。如下图所示。

    SourceTree使用教程(四)---冲突解决
    SourceTree使用教程(四)---冲突解决
  4. 4

    打开本地工作副本的test1.txt文件,新增内容code conclick2,如下图:

    SourceTree使用教程(四)---冲突解决
  5. 5

    打开sourceTree,可以看到本地工作副本有个待提交记录。

    SourceTree使用教程(四)---冲突解决
  6. 6

    推送代码。这个时候你修改完了本地的功能,并不知道远程仓库上也有人提交了该文件的修改。直接推送本地修改,推送本地工作副本到远程仓库,运行完成后会报错,大概是提示本地仓库和远程仓库版本不一致,无法提交,但是本地工作副本的修改却是已经提交到了本地仓库。如下图。

    SourceTree使用教程(四)---冲突解决
    SourceTree使用教程(四)---冲突解决
  7. 7

    既然提示 和远程仓库版本不一致,无法推送,那只能先拉成一致了。点击拉取图标,等执行完,就会出现下图所示。有一个待拉取的图标和一个待推送的图标,并且test1.txt文件的图标变成了黄色的感叹号。这个时候文件的冲突就造成了。

    SourceTree使用教程(四)---冲突解决
  8. 8

    冲突文件会把两者的修改以冲突的方式合在一个文件里,等待使用者去处理。那么基本的处理思想是:要么使用其中某一个人的,要么使用两者的组合。

    冲突的解决需要一个外部代码对比工具,我这里使用的是Beyond Compare 4,大家可以自己百度下载安装,然后集成到sourceTree软件中。如下图。在外部对比工具中找到Beyond Compare 4的可执行程序,点击确定。

    SourceTree使用教程(四)---冲突解决
  9. 9

    下面开始使用代码对比工具解决冲突,选中待解决冲突的代码,右键 解决冲突,打开外部合并工具。

    SourceTree使用教程(四)---冲突解决
  10. 10

    等待一会,Beyond Compare 4就会被打开。第一块是本地修改的版本,第二块是冲突两者(本地仓库和远程仓库)相同的版本基准,第三块是 远程仓库的修改。第四块是冲突处理后的代码。

    SourceTree使用教程(四)---冲突解决
  11. 11

    本次解决冲突是为了合并两者的修改,所以我会把第一块和第三块所做的修改按照正确的逻辑顺序,合到第四块。如下图,点击保存。关闭该对比软件。

    SourceTree使用教程(四)---冲突解决
  12. 12

    切到sourceTree界面,可以看到多了一个解决冲突的中间文件,由于冲突已解决,直接右键移除,

    SourceTree使用教程(四)---冲突解决
  13. 13

    可以看到冲突已解决,代码已正确合并。推送该合并。

    SourceTree使用教程(四)---冲突解决
  14. 14

    这样冲突就被解决了,可以看到本地工作副本和远程仓库的代码都是一致的了。

    SourceTree使用教程(四)---冲突解决














































Sourcetree支持文件的部分提交(5)

        SourceTree比起tortoiseGit来,最大的不同之处在于 Sourcetree支持文件的部分提交,这大大方便了用户的使用。

       有的时候,我们开发了一个A功能,未上线,同时又并发开发了B功能,B功能比A功能先上线,而且B功能和A功能修改的是同一个文件,这种情况在上线B功能时,SourceTree就体现出优势了。

方法/步骤


  1. 1

    打开本地工作副本,增加文件activityServiceImpl.java,这个文件没啥特别,就是代码行数很多,方便演示。

    SourceTree使用教程(五)
  2. 2

    打开SourceTree,推送该文件。

    SourceTree使用教程(五)
  3. 3

    打开新增文件,新增func1,func2,func3三个功能,

    SourceTree使用教程(五)
  4. 4

    现在的要求是,只提交func3,不提交func1和func2。打开sourceTree。如下图

    SourceTree使用教程(五)
  5. 5

    右边区域滑到add func3处,点击暂存区块,该区块就会保存到待提交区。

    SourceTree使用教程(五)
  6. 6

    已暂存文件里是待提交的,未暂存文件里不需要提交的,这样在一个文件里,就可以提交需要提交的,而不需要提交的也可以保留在工作区,等待下次提交

    SourceTree使用教程(五)
  7. 7

    提交推送,如下图。

    SourceTree使用教程(五)
  8. 8

    撤销回滚。在团队协作开发中,有时候提交完代码后,发现提交错了,这个时候,撤销回滚就起了重要作用。

    在最新的提交记录上,右键-》回滚提交

    SourceTree使用教程(五)
  9. 9

    在弹窗里选择是。

    SourceTree使用教程(五)
  10. 10

    可以看到提交历史记录多了一个Revert  反向提交

    SourceTree使用教程(五)
  11. 11

    打开本地工作副本,看到 做的修改已去除

    SourceTree使用教程(五)
  12. 12

    这个时候,反向提交只提到了本地仓库,如需撤销远程仓库的,还需推送到远程仓库

    SourceTree使用教程(五)
  13. 13

    点击推送,可以看到提交的func3已撤销。如下图。

    SourceTree使用教程(五)

















































回滚版本到某次提交(6)

在SourceTree使用教程(五)中讲到了提交的撤销回滚,并且注明这个撤销回滚只能撤销回滚最新的提交记录,并不能回滚到某个历史版本。但是实际使用场景中肯定会遇到需要回退到某个提交的,而不仅仅是最新的提交。本次教程将讲述如何使用SourceTree来回退代码到某次提交。

方法/步骤

  1. 1

    打开sourceTree,切换到开发分支

    SourceTree使用教程(六)--回滚版本到某次提交
  2. 2

    打开本地工作副本test1.txt文件,编辑新增 add test1 

    SourceTree使用教程(六)--回滚版本到某次提交
  3. 3

    提交并推送本次新增到远程仓库

    SourceTree使用教程(六)--回滚版本到某次提交
  4. 4

    打开本地工作副本test1.txt文件,编辑新增 add test2

    SourceTree使用教程(六)--回滚版本到某次提交
  5. 5

     提交并推送本次修改到远程仓库,可以看到最新的历史记录在本地仓库和远程仓库都已有了新增test1和新增test2

    SourceTree使用教程(六)--回滚版本到某次提交
  6. 6

    如果这个时候突然发现前面的两次提交是错误的,现在想回到“提取release分支的某次提交到develop分支”这个版本。有两种解决方式,第一种是删除掉新增test1和新增test2两次提交所加的内容,但是这有个前提,是修改内容很少的情况下才可以采用此方法,否则会陷入无穷无尽的代码比对泥沼。那么第二种方式就是该教程将要讲述的。回退到某个历史版本。

    SourceTree使用教程(六)--回滚版本到某次提交
  7. 7

    切换到sourceTree界面,打开develop分支的日志/历史,鼠标选中将要回退到的那个历史提交记录

    SourceTree使用教程(六)--回滚版本到某次提交
  8. 8

    右键-》重置当前分支到此次提交

    SourceTree使用教程(六)--回滚版本到某次提交
  9. 9

    在弹窗中 使用模式选择 强行合并--丢弃所有改动过的工作副本,点击确定

    SourceTree使用教程(六)--回滚版本到某次提交
  10. 10

    等待重置完,可以看到本地仓库的develop分支已回退到 “提取 release分支的某次提交到 develop分支”提交。而且本地仓库落后远程仓库两个提交记录。

    SourceTree使用教程(六)--回滚版本到某次提交
  11. 11

    依然是同样的操作。选中最新的提交历史记录,右键-》重置当前分支到此次提交

    SourceTree使用教程(六)--回滚版本到某次提交
  12. 12

    这次选的使用模式是软合并 – 保持所有本地改动,点击确定

    SourceTree使用教程(六)--回滚版本到某次提交
  13. 13

    等待重置完。发现本地仓库开发分支已和远程仓库开发分支同步。这个结果似乎看起来两次重置抵消了一样,代码版本没有发生任何的变化。实际并不是这样,这就是神奇之处,会让你恍然大悟的地方。

    SourceTree使用教程(六)--回滚版本到某次提交
  14. 14

    切换到文件状态,可以看到本地工作副本多了一个test1.txt的改动文件,而且改动文件的内容正好删除了 新增test1和新增test2两次提交所修改的内容。

    SourceTree使用教程(六)--回滚版本到某次提交
  15. 15

    那么,剩下的操作只需将这个改动文件提交并推送到远程仓库,是不是就OK了?

    下面尝试,提交并推送该改动文件。如下图,推送之后的效果。

    SourceTree使用教程(六)--回滚版本到某次提交
  16. 16

    如下图,可以看出本地工作副本和远程仓库的 add test1 和 add test2内容都被回退掉了。也就是代码版本从内容上回退到了某个历史版本,但是提交历史记录并没有回退。Git只会增加提交历史记录,是不会回退或删除提交记录的。我们所说的回退都是指的回退内容。

    SourceTree使用教程(六)--回滚版本到某次提交























































合并某次提交(7)

在Git的实际使用场景中,未必都是很规矩的拉一个分支,开发一个功能,等功能测试完成后,合并到主分支。有很多的场景都是很多人在同一个开发分支上开发,然后按照上线的实际需要,依次去上传自己的功能模块,这个功能模块的提交记录很可能是交叉提交的,那么这时候如何去只合并一个功能到主分支呢?或者是说怎么使用sourceTree去合并某次或某几次(不连续)提交到另一个分支?

方法/步骤

  1. 1

    打开sourceTree,切换到develop分支

    SourceTree使用教程(七)--合并某次提交
  2. 2

    打开本地工作副本,新增test2.txt文件,并编辑 add func1内容

    SourceTree使用教程(七)--合并某次提交
  3. 提交并推送这次新增到远程仓库

    SourceTree使用教程(七)--合并某次提交
  4. 打开本地工作副本,编辑test2.txt文件,新增 add func2

    SourceTree使用教程(七)--合并某次提交
  5. 提交并推送这次修改内容,执行完成后,如下图所示

    SourceTree使用教程(七)--合并某次提交
  6. 现在test2.txt文件 新增的 func1功能由于测试通过,需要先上线,合并到master分支。也就是要合并 新增test2.txt文件  add func1 的提交到master,而不动“新增func2”的提交。

    切换到master分支,可以看到master分支落后 develop分支好多版本了,test2.txt文件对于master分支完全是新增文件,所以待会合并某次提交到master分支的时候,应该不会产生冲突的。下面关键的操作来了。

    SourceTree使用教程(七)--合并某次提交
  7. 将当前分支切换到所有分支,如下图红框内

    SourceTree使用教程(七)--合并某次提交
  8. 选择待合并的提交记录,右键 – 》遴选

    SourceTree使用教程(七)--合并某次提交
  9. 在确认遴选的弹窗中点击是。

    SourceTree使用教程(七)--合并某次提交
  10. 执行完后。切换到当前分支,可以看到master分支的本地仓库多了一个” 新增test2.txt文件  add func1” 的提交历史记录。执行的过程中果然是没有遇到冲突

    SourceTree使用教程(七)--合并某次提交
  11. 推送该次合并到master分支的远程仓库。这样就完成了,合并某次提交到另一分支的操作。

    SourceTree使用教程(七)--合并某次提交
  12. sourceTree使用教程系列就到此结束了。总共七篇教程,基本涵盖了Git的所有使用场景,希望能帮助大家。有问题及时跟我沟通,谢谢!

    SourceTree使用教程(七)--合并某次提交













猜你喜欢

转载自blog.csdn.net/bobo553443/article/details/80732665
今日推荐