SourceTree
- 0、前言
- 1、SourceTree | Github Desktop | TortoiseGit 可视化管理工具对比
-
- Github Desktop
- TortoiseGit
- Sourcetree
- 2、SourceTree可视化管理工具安装及配置
-
- SourceTree简介
- SourceTree下载地址
- SourceTree Atlassian账号注册地址:
- 选择分布式版本控制系统(Git or Mercurial)
- 在SourceTree中添加SSH密钥:
- 3、 `Clone对应托管平台仓库(以Gitee为例):`
-
- SourceTree设置默认工作目录:
- SourceTree代码提交:
-
- 1.首先切换到需要修改功能代码所在的分支:
- 2.将修改的代码提交到暂存区:
- 3.将暂存区中的代码提交到本地代码仓库:
- 4.代码拉取更新本地代码库,并将代码推送到远程仓库:
- 5.在Gitee中查看推送结果:
- 4、SourceTree分支切换,新建,合并:
-
- 5、SourceTree代码冲突解决:
-
- 直接打开冲突文件手动解决冲突:
- 采用外部文本文件对比工具Beyond Compare解决冲突:
- 6、Sourcetree中的基本名词说明:
- 7、Git分布式版本控制器常用命令和使用:
-
- Git文件的四种状态:
- Git工作的四个区域:
- 多个Git账号的登录与切换:
- 查看Git项目远程仓库地址:
- 查看用户名和邮箱地址:
- 拷贝一个Git仓库到本地:
- 8、开发环境中Git完整提交步骤:
-
- 首拉取服务器代码:
- 查看当前工作目录树的工作修改状态(这个命令在git中使用最频繁了,原因会告诉你下一步该做的事情):
- 将工作区修改添加的文件提交到暂存区:
- 将暂存区代码提交到本地仓库中:
- 将代码推送到服务器(主分支):
- 9、Git提交过程遇到问题:
-
- 误将代码提交到暂存区中(git add):
- 误将暂存区代码提交到本地仓库(git commit):
- git pull和git fetch的用法及区别:
- 10、Git撤销,回退/还原,删除操作:
-
- Git取消从工作区提交到暂存区的文件追踪:
- 工作区于暂存区之间的提交回退操作:
- 版本库回退到工作区:
- 查看提交历史:
- 合并与衍合:
- Git拉取时设置拉取深度:
- Git查看分支查看:
- 11、SourceTree如何提交PR(Pull Request):
-
- 1、fork 项目:
- 2、克隆本地
- 3、根据文档创建分支
- 4、提交修改的代码到远程代码库
- 5、提交 Pull Request
0、前言
俗话说的好工欲善其事必先利其器,Git分布式版本控制系统是我们日常开发中不可或缺的。目前市面上比较流行的Git可视化管理工具有SourceTree、Github Desktop、TortoiseGit,综合网上的一些文章分析和自己的日常开发实践心得个人比较推荐开发者使用SourceTree,因为SourceTree同时支持Windows和Mac,并且界面十分的精美简洁,大大的简化了开发者与代码库之间的Git操作方式。该篇文章主要是对日常开发中使用SourceTree可视化管理工具的一些常用操作进行详细讲解。
1、SourceTree | Github Desktop | TortoiseGit 可视化管理工具对比
比较项\软件名称 |
Github Desktop |
Sourcetree |
TortoiseGit |
软件出品 |
Github |
Atlassian |
TortoiseGit |
厂商Git平台 |
有(Github) |
有(Bitbucket) |
无 |
安装包大小 |
91M |
24M |
23M |
中文操作界面 |
无 |
有 |
有 |
用户可设置选项 |
较少 |
丰富 |
丰富 |
软件稳定性 |
非常稳定 |
稳定 |
稳定 |
分支处理等图形界面 |
无 |
有 |
有 |
后台执行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 "[email protected]"
,这个地方输入的是你注册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 config --global user.name "你的名称"
git config --global user.email "你的邮箱"
切换完成后,查看对应的账号:
git config user.name
输出账号名称:YSGStudyHards
- 详情参考博客:https://blog.csdn.net/qq_36602939/article/details/79794686
查看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
git rm --cached file_path(文件名称,ysg.txt)
git checkout
版本库回退到工作区:
1
2
3
4
5
【这里操作是已经提交了在本地代码库的操作】
git reset HEAD^
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
git rebase <branch>
Git拉取时设置拉取深度:
git clone --depth=1 [email protected]:xxx.git
Git查看分支查看:
git branch -vv 查看当前开发分支
git branch 查看本地所有分支
git branch -r 查看远程所有分支
git branch -a 查看本地和远程所有分支
11、SourceTree如何提交PR(Pull Request):
1、fork 项目:
2、克隆本地
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