为什么要用sourceTree?
某一模块的功能我做出来,下一个功能我不一定能顺利做出来,在做这个有挑战的功能前,我想存个档,这样万一做不出来,在soureceTree上点击“丢弃”就能恢复到之前存档的状态,要比自己去删代码要轻松很多。用sourceTree,代码写到一个阶段,就提交下,soureTree是图形界面,我能看到我对代码都做了什么。心里踏实,什么框架、库、API啦也敢去试。写代码尝试是避免不了的。
如何使用?
修改代码前
克隆
检出
- 检出是什么意思?
代码克隆到本地电脑上,可能克隆的是master
分支。但是,有可能master分支上没有代码,代码都被提交到dev分支上了。
所以,我要把dev分支上的代码克隆到我的电脑上,并且本地代码切到dev分支上。我理解的检出就是这个意思 - 检出步骤
- 右击某一远程分支
- 检出远程分支
新建分支
- 双击dev分支,代码切到dev分支上(新建的分支的代码是拷贝这个分支的)
- 鼠标在“分支”二字上右击=> 新建分支
- 输入我的分支名=>新建分支
拉取
大家团队开发同一个项目,别人提交了新的代码到远程仓库。这时候我本地的代码不是最新的,要拉取远程最新代码。
合并别的分支的代码到我的分支上
就是将两个分支的代码合并,修改的是我的分支的代码。
在我的分支上修改代码
修改、提交代码
- 代码切到Q_dev分支上(我新创建的自己的分支)
- 打开编辑器,修改代码,保存
- 打开sourceTree,点击工作副本,发现代码已经改变了,勾选要提交的代码
- 点击提交=>写提交信息,描述对代码做了什么改动=>提交
修改代码后
在我的分支上修改代码,完成了某一个功能,我想把代码推送到远程分支,要进行下面这一系列操作
假设dev是公共分支,Q_dev是我自己的开发分支
- 提交Q_dev分支代码
不提交切不了分支,操作步骤见『修改、提交代码』部分 - 切换到dev再次拉取代码
可能在你开发的过程中,远程仓库的代码被别人修改了
- 双击切换到Q_dev分支,将dev分支上的代码合并到Q_dev
为什么?因为合并代码可能会冲突,冲突了要修改本地的代码,将本地的代码合并,合并会出错,出错了反正是在你的分支上,你自己想办法。要是在dev分支上合并,出错了就有可能影响别的同事提交代码了。
操作步骤见『合并』部分 - 再次切到dev分支,将Q_dev分支上的代码合并到dev
这时候的代码已经在Q_dev分支上合并好了,所以再次合并到dev的时候就不会冲突了。 - 将本地dev分支的代码『推送』到远程
碎碎叨叨
『git分支』是什么?
一个git仓库可以新建很多个分支,git仓库有个“.git”的隐藏文件夹,记录各个分支的状态。虽然整个仓库只有一个文件夹,但是切换到不同分支,文件夹内的代码是不同的。
某一个功能代码写好了,要写下一个功能,但是心里没底?
- 修改代码前,确认代码已经被提交(表示已经存档)
- 修改代码后,打开sourceTree,点击工作副本,查看文件状态
- 点击“丢弃”
- 选中要丢弃的文件,丢弃更改,没有提交的文件会被全部丢弃掉
某个功能代码写的不成功,想还原到上一个commit重新开始?
- 如果新写的代码还没有提交,直接用sourceTree『丢弃』新写的代码
- 也可以使用回滚功能,看Git客户端SourceTree回滚到远程仓库和切换分支这篇教程
- 如果新写的代码已经提交了,那么可以使用『重置代码到当前分支』功能
- 『重置代码到当前分支』的意思是取消某一提交节点之前的所有提交,这时候我可以点击『丢弃』,代码就恢复到某一提交节点了。这个功能有危险,慎用。
- 我们有可能遇到这个情况:想研究下公司的代码,自己添些注释。所以要新建个自己的分支,在新建的分支上写一些注释。有时候又想切到公司的分支上查看代码。这时候,要么提交代码,要么将代码暂存,否则切不了分支。
- 暂存是什么意思?
暂存的意思就是将代码新修改的部分临时保存起来,这时候如果打开文件,会发现文件恢复到修改之前的状态了。
如果想把文件修改到恢复到修改后的状态,可以『应用缓存区』 - 如何使用暂存功能?
工作中sourceTree使用步骤
假设同事的代码都提交到dev分支上,假设我自己的开发分支是Q_dev
- 从远程拉取代码,保证代码最新。把最新的代码合并到自己的分支(Q_dev)上
- 在自己的分支上修改代码(Q_dev)
- 提交,推送(Q_dev)
- 切到dev分支,拉取代码(代码提交前先从远程拉取代码,防止代码冲突)
- 切到我的开发分支(Q_dev),合并dev到Q_dev,推送Q_dev上新合并的代码到远程Q_dev分支上
- 切到dev上,再合并Q_dev到当前分支(dev),提交代码,推送
提交代码前要做的3件事情
- git diff ,检查所有的变更
- 跑一遍单元测试
- 手动运行一遍所有demo
sourceTree 无法用SSH克隆克隆远程仓库?
比如用sourceTree 克隆链接是git@github.com:eddieeddieeddiejones/jQuery.git
这种方式是用SSH克隆
- 大致原理
我要在电脑上生成一个唯一识别码(就是一个密码),然后把这个密码添加到远程仓库,相当于远程仓库识别了这台电脑,再把这个唯一识别码添加到sourceTree,就可以用sourceTree克隆、修改、提交代码啦。 - 解决步骤
- 设置SSH密钥:
https://help.github.com/articles/connecting-to-github-with-ssh/ - 将本地生成的ssh密钥添加到sourceTree