SourceTree 中文使用指南

2015/11/1 软件教程软件环境SourceTree代码管理使用教程Git

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操作

  1. branches只有一个master, 点击右边的Uncommited changes,会显示你所有有改动但未提交的文件。

  1. 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 直接处理冲突

Visual Studio Code

如果没有使用工具,是手动合并,就要告诉SourceTree解决。

合并完后直接提交,冲突解决。

# 四、常见场景

# 将develop合并到master分支

  1. 分支(develop)提交代码到本地服务器,并推送到远程服务器。
  2. 切换到主分支(master)
  3. 选择你的子分支右键选择合并代码到主分支(master)

  1. 将合并到master上的代码,推送到远程服务器

# 获取 master 分支版本到 dev 分支然后进行修改

  1. 本地分支切换到 master 分支

  1. pull 到本地 dev 分支
  2. 切换到 dev 分支进行修改
  3. 提交到本地
Last Updated: 2022/1/8 04:00:18