SourceTree

0、前言

俗话说的好工欲善其事必先利其器,Git分布式版本控制系统是我们日常开发中不可或缺的。目前市面上比较流行的Git可视化管理工具有SourceTree、Github Desktop、TortoiseGit,综合网上的一些文章分析和自己的日常开发实践心得个人比较推荐开发者使用SourceTree,因为SourceTree同时支持Windows和Mac,并且界面十分的精美简洁,大大的简化了开发者与代码库之间的Git操作方式。该篇文章主要是对日常开发中使用SourceTree可视化管理工具的一些常用操作进行详细讲解。

1、SourceTree | Github Desktop | TortoiseGit 可视化管理工具对比

比较项\软件名称Github DesktopSourcetreeTortoiseGit
软件出品GithubAtlassianTortoiseGit
厂商Git平台有(Github)有(Bitbucket)
安装包大小91M24M23M
中文操作界面
用户可设置选项较少丰富丰富
软件稳定性非常稳定稳定稳定
分支处理等图形界面
后台执行Git命令不可见可见部分可见
安装方式无需注册平台需提前注册平台无平台注册
推荐度⭐⭐⭐⭐🌟⭐⭐⭐⭐⭐⭐⭐⭐⭐🌟

Github Desktop

  • Github 出品软件,评测版本: V2.3.1 (2020/02/24 时点最新版本)
  • 总体感受: 运行稳定,对Git协议支持完备,操作为英文界面。对每一次的Commit, pull, push等操作都按规范的Git流程进行辅助提示,与Github使用配合完美。开源英文项目团队首选。
  • 推荐指数: ⭐⭐⭐⭐🌟 (4.5星)

TortoiseGit

  • 经典的文件管理右键集成方式,TortoiseGit(V2.9.0) SVN用户熟悉的操作方式。
  • 推荐指数: ⭐⭐⭐⭐🌟 (4.5 星)

Sourcetree

  • Atlassian 出品软件,评测版本: V3.3.8 (2020/02/24 时点最新版本)
  • 总体感受: 有中文界面,分支构成等图像显示方式亲切友好,每一步Git操作都可以看到后台实际执行的Git命令,对理解Git协议原理很有帮助。
  • IDEA,Pycharm等IDE工具自身已经有Git集成(Version Control),但是还有很多项目团队成员并不是开发人员,他们同样需要管理设计文档,操作手册,图片说明等共享资料。 现在就连VS Code 安装一个Git插件,自己随意编写的便签文件都可以得到很好的版本管理。而Sourcetree 等工具的使用者更多是 Project Manager等需要看到项目全貌,掌控项目交付与进度的人。作为PG开发人员,有了Git,有了命令行,理论上说啥都能搞定了。但即使是PG人员,大家因为经验不同,碰到Branch Merge, Rebase 这些复杂的Git操作,未必每个人都理解得很清楚,而一旦操作失误,补救起来项目经理也要花费不必要的时间精力。 而一般正规大型项目都有master/develop/feature/release/hotfix 这样几个分支,仅靠IDEA, Pycharm里的集成Git工具难以看到项目全貌。使用了SourceTree, 项目经理发布产品的工作效率将大大提升。比如需要对产品 A. Release V2.1766.908 新增两个功能,打个补丁后下周发布,Sourcetree就会更好帮到你。

2、SourceTree可视化管理工具安装及配置

SourceTree简介

  • 通过一个简单的用户界面即可使用所有的Git命令
  • 通过一次单击,即可管理所有的Git库,无论是托管的还是本地的
  • 通过一次单击,即可进行commit、push、pull、merge等操作
  • 一些先进的功能,如补丁处理、rebase、shelve、cherry picking等
  • 可以连接到你托管在Bitbucket、Stash、Microsoft TFS或GitHub中的代码库

SourceTree下载地址

SourceTree Atlassian账号注册地址:

https://www.atlassian.com/zh/try/cloud/signup?product=jira-software.ondemand

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

选择分布式版本控制系统(Git or Mercurial)

在这里插入图片描述

在SourceTree中添加SSH密钥:

  • 1).安装好SourceTree和Git后打开SourceTree,点击上面的”命令行”按钮。在这里插入图片描述
  • 打开命令行:
    在这里插入图片描述
  • 2).输入ssh-keygen -t rsa -C "example@example.com",这个地方输入的是你注册gitlab所使用的邮箱。按回车,之后还需要输入密码之类的东西,可以选择不输入直接回车。在这里插入图片描述
  • 最后显示如上图所示的信息就表示生成SSH key成功了,可以进行下一步操作了。
  • 在这儿我们生成的秘钥文件在图中也标识出来了,即: C:/Users/LC/.ssh目录下面。如下图:在这里插入图片描述
  • 3).把上图中的id_rsa.pub文件用记事本之类的文本编辑器打开,然后将其中内容全部复制。
  • 4).登录GitLab的个人账户,找到SSH Keys,并将复制的内容粘贴到Key下面的文本域中,然后点击Add Key。在这里插入图片描述
  • 5).在SourceTree中配置与GitLab公钥对应的公钥。点击工具->选项:在这里插入图片描述
  • 到这儿为止,SourceTree配置SSH就完成了。
  • 需要注意的是,如果这中间没有配置好的话,从GitLab服务器上clone Project的时候会提示没有权限或不是一个有效的Git仓库。
  • 来源: https://blog.csdn.net/xyzchenxiaolin/article/details/51853319

3、 Clone对应托管平台仓库(以Gitee为例):

-
在这里插入图片描述
在这里插入图片描述

SourceTree设置默认工作目录:

  • 设置SourceTree默认项目目录:
    • 点击工具=>选项=>一般=>找到项目目录设置Clone项目默认存储的位置
      在这里插入图片描述

SourceTree代码提交:

1.首先切换到需要修改功能代码所在的分支:

在这里插入图片描述
在这里插入图片描述

2.将修改的代码提交到暂存区:

在这里插入图片描述

3.将暂存区中的代码提交到本地代码仓库:

注意:多人同时开发项目的时候,不推荐默认选中立即推送变更到origin/develop,避免一些不必要的麻烦!
在这里插入图片描述

4.代码拉取更新本地代码库,并将代码推送到远程仓库:

在这里插入图片描述

  • 勾选需要推送的分支,点击推送到远程分支:
    在这里插入图片描述
  • 代码成功推送到远程代码库:
    在这里插入图片描述

5.在Gitee中查看推送结果:

在这里插入图片描述

4、SourceTree分支切换,新建,合并:

1.分支切换:

  • 双键切换
    在这里插入图片描述
  • 单击鼠标右键切换
    在这里插入图片描述

2.新建分支:

注意:在新建分支时,我们需要在哪个主分支的基础上新建分支必须先要切换到对应的主分支才能到该主分支上创建分支,如下我们要在master分支上创建一个feature-0613分支:在这里插入图片描述
在这里插入图片描述

3.合并分支:

注意:在合并代码之前我们都需要将需要合并的分支拉取到最新状态(**避免覆盖别人的代码,或者丢失一些重要文件)!!!!!

  • 在master分支上点击右键,选择合并feature-0613至当前分支即可进行合并:
    在这里插入图片描述
  • 分支合并成功:
    在这里插入图片描述

5、SourceTree代码冲突解决:

  • 首先我们需要制造一个提交文件遇到冲突的情景:
  • 在SoureceTree中在Clone一个新项目,命名为pingrixuexilianxi2,如下图所示:
    在这里插入图片描述
  • 我们以项目中的【代码合并冲突测试.txt】文件为例:
    在这里插入图片描述
  • 在pingrixuexilianxi中添加内容,提交代码(不选择立即推送变更到origin/master),拉取代码即会遇到冲突:在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 冲突文件中的内容:在这里插入图片描述

直接打开冲突文件手动解决冲突:

  • 由下面的冲突文件中的冲突内容我们了解到:
<<<<<<< HEAD
6月19日 pingrixuexilianxi添加了内容
=======
6月18日 pingrixuexilianxi2修改了这个文件哦
>>>>>>> a8284fd41903c54212d1105a6feb6c57292e07b5
  • <<<<<<< HEAD到 =======里面的【6月19日 pingrixuexilianxi添加了内容】是自己刚才的Commit提交的内容
    =======到 >>>>>>> a8284fd41903c54212d1105a6feb6c57292e07b5里面的【6月18日 pingrixuexilianxi2修改了这个文件哦】是远程代码库更新的内容(即为pingrixuexilianxi2本地代码库推送修改内容)。
  • 根据项目需求删除不需要的代码就行了,假如都需要的话我们只需要把 <<<<<<< HEAD======= >>>>>>> a8284fd41903c54212d1105a6feb6c57292e07b5都删掉冲突就解决了(注意,在项目中最后这些符号都不能存在,否则可能会报异常)。
  • 最后将冲突文件标记为已解决,提交到远程仓库:在这里插入图片描述

采用外部文本文件对比工具Beyond Compare解决冲突:

SourceTree配置文本文件对比工具Beyond Compare:

  • 工具=>选项=>比较:在这里插入图片描述
    在这里插入图片描述
  • 使用Beyond Compare解决冲突:
  • Beyond Compare使用技巧:官方全面教程:https://www.beyondcompare.cc/jiqiao/
  • SourceTree打开外部和合并工具:在这里插入图片描述
  • 注意:第一次启动Beynod Compare软件需要一会时间,请耐心等待:在这里插入图片描述
  • Beynod Compare进行冲突合并:在这里插入图片描述
  • 点击保存文件后关闭Beynod Compare工具,SourceTree中的冲突就解决了,在SourceTree中我们会发现多了一个 .orig 的文件。接着选中那个.orig文件,单击右键 => 移除,最后我们推送到远程代码库即可:在这里插入图片描述

6、Sourcetree中的基本名词说明:

  • 克隆/新建(clone):从远程仓库URL加载创建一个与远程仓库一样的本地仓库。
  • 提交(commit):将暂存区文件上传到本地代码仓库。
  • 推送(push):将本地仓库同步至远程仓库,一般推送(push)前先拉取(pull)一次,确保一致(十分注意:这样你才能达到和别人最新代码同步的状态,同时也能够规避很多不必要的问题)。
  • 拉取(pull):从远程仓库获取信息并同步至本地仓库,并且自动执行合并(merge)操作(git pull=git fetch+git merge)。
  • 获取(fetch):从远程仓库获取信息并同步至本地仓库。
  • 分支(branch):创建/修改/删除分枝。
  • 合并(merge):将多个同名文件合并为一个文件,该文件包含多个同名文件的所有内容,相同内容抵消。
    贮藏(git stash):保存工作现场。
  • 丢弃(Discard):丢弃更改,恢复文件改动/重置所有改动,即将已暂存的文件丢回未暂存的文件。
  • 标签(tag):给项目增添标签。
  • 工作流(Git Flow):团队工作时,每个人创建属于自己的分枝(branch),确定无误后提交到master分支。
  • 终端(terminal):可以输入git命令行。
  • 每次拉取和推送的时候不用每次输入密码的命令行:git config credential.helper osxkeychain sourcetree。
  • 检出(checkout):切换不同分支。
  • 添加(add):添加文件到缓存区。
  • 移除(remove):移除文件至缓存区。
  • 重置(reset):回到最近添加(add)/提交(commit)状态。

7、Git分布式版本控制器常用命令和使用:

Git文件的四种状态:

  • 未跟踪(untrack):未追踪,表示文件为新增加的
  • 已修改(modified):表示修改了文件,但还没保存到git仓库中
  • 已暂存(staged):表示修改的文件提交到了暂存区,但是还没有提交到本地Git版本库
  • 已提交(committed):表示数据安全提交到了本地Git版本库

Git工作的四个区域:

  • Working Directory(工作目录):即正在编辑的文件状态。文件状态为未跟踪(untrack)和已修改(modified)在此区域内
  • Staging Area(暂存区):保存了下次将提交的文件列表信息。文件状态为已暂存(staged)在此区域内
  • Repository(本地仓库):提交到本地仓库的文件
  • Repository(远程仓库):已提交到远程计算机内的文件
  • 提交流程为:工作区》暂存区》本地版本库》远程版本库

多个Git账号的登录与切换:

  • 在Git Bash Here的控制台里输入:
git config --global user.name "你的名称"
git config --global user.email "你的邮箱"
 
切换完成后,查看对应的账号:
git config user.name
输出账号名称:YSGStudyHards

查看Git项目远程仓库地址:

git remote -v

在这里插入图片描述

查看用户名和邮箱地址:

//查看用户名
git config user.name
//查看邮箱地址
git config user.email 

拷贝一个Git仓库到本地:

git clone

8、开发环境中Git完整提交步骤:

首拉取服务器代码:

注意:提交代码之前,需先从服务器上面拉取代码,以防覆盖别人代码!

git pull 

查看当前工作目录树的工作修改状态(这个命令在git中使用最频繁了,原因会告诉你下一步该做的事情):

git status  

将工作区修改添加的文件提交到暂存区:

git add + 文件
 
git add -u + 路径:将修改过的被跟踪代码提交缓存
 
git add -A + 路径: 将修改过的未被跟踪的代码提交至缓存  

将暂存区代码提交到本地仓库中:

git commit -m “功能修改,这里是注释”

将代码推送到服务器(主分支):

git push origin master  

9、Git提交过程遇到问题:

误将代码提交到暂存区中(git add):

  • 解决办法:利用 git reset 命令将撤回缓存中的代码。

误将暂存区代码提交到本地仓库(git commit):

  • 解决办法:
  • 回退到某个版本,只回退了commit的信息,不会改变已经修改过的代码。
git reset —soft + 版本号
  • 彻底回退到某个版本,本地的代码也会改变上一个版本内容
git reset —hard + 版本号

git pull和git fetch的用法及区别:

  • git pull (拉取):

    • 是拉取远程分支更新到本地代码库的操作,比如远程仓库的学习资料有更新,需要把新的内容下载下来,可以使用git pull 是相当于从远程仓库获取最新版本,然后再与本地分支merge(合并)!
  • git fetch (提取):

    • 理解 fetch 的关键, 是理解 FETCH_HEAD,FETCH_HEAD指的是: 某个branch在服务器上的最新状态’。这个列表保存在 .Git/FETCH_HEAD 文件中, 其中每一行对应于远程服务器的一个分支。
    • 当前分支指向的FETCH_HEAD, 就是这个文件第一行对应的那个分支,使用git fetch获取远程仓库最新代码,但是不会自动合并(merge),git fetch更安全一些,因为在merge(合并)前,我们可以查看更新情况,然后再决定是否合并。

10、Git撤销,回退/还原,删除操作:

Git取消从工作区提交到暂存区的文件追踪:

在使用git的时候,有些文件是不需要上传的,所以就可以修改
例如:
如果是对所有文件都取消跟踪的话,就是
git rm -r --cached .   //不删除本地文件
git rm -r --f .   //删除本地文件【不推荐使用,因为会把本地的文件也给删除了】
  
对某个文件取消跟踪
git rm --cached readme1.txt    //删除readme1.txt的跟踪,并保留在本地(推荐使用)
git rm --f readme1.txt    //删除readme1.txt的跟踪,并且删除本地文件。

工作区于暂存区之间的提交回退操作:

# 添加指定文件到暂存区
git add [file1] [file2] ...
# 添加指定目录到暂存区,包括子目录
git add [dir]
# 添加当前目录的所有文件到暂存区
git add .
#当我们需要删除暂存区或分支上的文件, 同时工作区也不需要这个文件了, 可以使用
git rm file_path
#当我们需要删除暂存区或分支上的文件, 但本地又需要使用, 这个时候直接push那边这个文件就没有,如果push之前重新add那么还是会有。
git rm --cached file_path(文件名称,ysg.txt)
#直接加文件名   从暂存区将文件恢复到工作区,如果工作区已经有该文件,则会选择覆盖
#加了【分支名】 +文件名  则表示从分支名为所写的分支名中拉取文件 并覆盖工作区里的文件
git checkout

版本库回退到工作区:

  
1
2
3
4
5
【这里操作是已经提交了在本地代码库的操作】
#去掉上一次的提交(会直接变成add之前状态,即取消追踪)  
git reset HEAD^
#去掉上一次的提交(变成add之后,commit之前状态)
git reset --soft  HEAD^  

查看提交历史:

git log                         # 查看提交历史
git log -p <file>               # 查看指定文件的提交历史
git blame <file>                # 以列表方式查看指定文件的提交历史
git log --oneline               # 查看提交日志,并且只显示第一行

合并与衍合:

git merge <branch>               # 合并指定分支到当前分支
git merge --abort                # 取消当前合并,重建合并前状态
git merge dev -Xtheirs           # 以合并dev分支到当前分支,有冲突则以dev分支为准
git rebase <branch>              # 衍合指定分支到当前分支 

Git拉取时设置拉取深度:

git clone --depth=1 git@github.com:xxx.git

Git查看分支查看:

git branch -vv 查看当前开发分支
git branch  查看本地所有分支
git branch -r  查看远程所有分支
git branch -a  查看本地和远程所有分支
 

11、SourceTree如何提交PR(Pull Request):

1、fork 项目:

在这里插入图片描述

2、克隆本地

在这里插入图片描述

  • 打开Git Bash输入仓库克隆命令:
git clone https://github.com/liangtongzhuo/taro-ui.git

3、根据文档创建分支

拖进 SourceTree,基于 dev 创建分支如下图:在这里插入图片描述

4、提交修改的代码到远程代码库

  • 文章上面已经提到了使用SourceTree提交的相关操作,可参考:
    https://www.cnblogs.com/Can-daydayup/p/13128633.html#_label5(或者Ctrl F:SourceTree代码提交)
  • 当然也可以使用git命令提交:
git add .  --提交所有修改的文件到本地暂存区
git commit -m"fix(dos):修正文字 "   --提交到本地代码库
git push  --提交到github中的远程代码库

5、提交 Pull Request

第四步提交成功后,进入原来fork的仓库,点击 Compare在这里插入图片描述

  • 提交你的说明,选择合并的分支即可,剩下等待合并。在这里插入图片描述

参考自https://www.cnblogs.com/Can-daydayup/p/13128633.html

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐