SourceTree 中文使用指南
Git有很多图形界面工具,只推荐 SourceTree,由 Atlassian 开发的免费Git图形界面工具,可以操作任何 Git 库。
# 一、SourceTree & Git 部分名词解释
- 克隆(clone):从远程仓库URL加载创建一个与远程仓库一样的本地仓库
- 提交(commit):将暂存文件上传到本地仓库(我们在Finder中对本地仓库做修改后一般都得先提交一次,再推送)
- 检出(checkout):切换不同分支
- 添加(add):添加文件到缓存区
- 移除(remove):移除文件至缓存区
- 暂存(git stash):保存工作现场
- 重置(reset):回到最近添加(add) /提交(commit) 状态
- 分支(branch):创建/修改/删除分枝
- 合并(merge):将多个同名文件合并为一个文件,该文件包含多个同名文件的所有内容,相同内容抵消
- 推送(push):将本地仓库同步至远程仓库,一般推送(push)前先拉取(pull)一次,确保一致
- 获取(fetch):从远程仓库获取信息并同步至本地仓库
- 拉取(pull):从远程仓库获取信息并同步至本地仓库,并且自动执行合并(merge)操作,即pull=fetch+merge
- 推送(push):将本地仓库同步至远程仓库,一般推送(push)前先拉取(pull)一次,确保一致
- 标签(tag):给项目增添标签
- 工作流(Git Flow):团队工作时,每个人创建属于自己的分支(branch),确定无误后提交到master分支 终端(terminal):可以输入git命令行
# 二、SourceTree操作
- branches只有一个master, 点击右边的Uncommited changes,会显示你所有有改动但未提交的文件。
- Unstaged files这一块内容,我们按住shift,选择所有你要提交的文件,然后再点鼠标右键,选择add(意思就是add到本地的索引库),操作完成后,Staged files这块内容就会出现我们刚才选择的所有文件
# 三、分支管理
# 1. 分支
分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。合并也是在本地合并,把本地的dev合并到本地的master,再把本地的master推到远程master.
所以,团队合作的分支看起来就像这样:
master分支是主分支,因此要时刻与远程同步;
dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
# 2. Bug分支
软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。
# 3. feature分支
软件开发中,总有无穷无尽的新的功能要不断添加进来。 添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。 现在,你终于接到了一个新任务:开发代号为Vulcan的新功能,该功能计划用于下一代星际飞船。
# 4. 解决冲突
很多命令都可能出现冲突,但从根本上来讲,都是merge 和 patch(应用补丁)时产生冲突。而rebase就是重新设置基准,然后应用补丁的过程,所以也会冲突。git pull会自动merge,repo sync会自动rebase,所以git pull和repo sync也会产生冲突。当然git rebase就更不用说了。冲突有多种类型,最常碰到的就是内容冲突了,两个用户同时修改了同一个文件的同一行(一块区域)的代码,就会产生冲突,接下来介绍的就是如何解决。
# 1)产生冲突
现在服务器文件内容如下:
本地文件内容如下:
这种情况如果拉取pull合并一定是冲突的。拉取下来报错了。
# 2)解决冲突
在冲突的记录上右键 => 合并
查看文件状态,显示有冲突的文件
现在看资源管理器,产生了的文件,是合并的辅助文件,合并完如果没自动删除,可以手动删。
打开 “文件1.txt” 看到,打开存在冲突的文件,会看到如下标志:
HEAD 新的部分:HEAD 至 =======
旧的部分:======= 至 >>>>>>
可以使用 VS Code 直接处理冲突
如果没有使用工具,是手动合并,就要告诉SourceTree解决。
合并完后直接提交,冲突解决。
# 四、常见场景
# 将develop合并到master分支
- 分支(develop)提交代码到本地服务器,并推送到远程服务器。
- 切换到主分支(master)
- 选择你的子分支右键选择合并代码到主分支(master)
- 将合并到master上的代码,推送到远程服务器
# 获取 master 分支版本到 dev 分支然后进行修改
- 本地分支切换到 master 分支
- pull 到本地 dev 分支
- 切换到 dev 分支进行修改
- 提交到本地