{"id":20200225,"url":"https://github.com/mxabc/git-sourcetree","last_synced_at":"2026-03-06T02:34:08.250Z","repository":{"id":145808595,"uuid":"161720563","full_name":"MxABC/git-sourcetree","owner":"MxABC","description":"git-sourcetree客户端使用参考手册","archived":false,"fork":false,"pushed_at":"2018-12-14T05:45:40.000Z","size":19,"stargazers_count":7,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-13T20:14:27.952Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MxABC.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-12-14T02:22:53.000Z","updated_at":"2024-04-08T11:38:51.000Z","dependencies_parsed_at":"2023-04-18T22:02:30.259Z","dependency_job_id":null,"html_url":"https://github.com/MxABC/git-sourcetree","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MxABC%2Fgit-sourcetree","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MxABC%2Fgit-sourcetree/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MxABC%2Fgit-sourcetree/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MxABC%2Fgit-sourcetree/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MxABC","download_url":"https://codeload.github.com/MxABC/git-sourcetree/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241637149,"owners_count":19994925,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-14T04:42:31.376Z","updated_at":"2026-03-06T02:34:03.211Z","avatar_url":"https://github.com/MxABC.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\n# 资料备份管理\n\n没用过版本控制系统的，开发过程中，每天copy一份来备份代码或其他文档，间歇性拿移动硬盘copy备份代码。\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/58718695.png)\n存在的缺点：\n1. PM说改回之前什么需求的代码，然后就开始找代码，不记得就每个工程打开，看代码是否符合要求\n2. 今天下午代码写错了，测试有bug，想还原到上午的代码，只能凭记忆慢慢删除下午添加的代码，或copy昨天的代码，拿出来重新慢慢添加今天新增的代码\n3. 多人一起开发一个项目，怎么合并代码？\n4. 项目有多个功能需求，分2次上线，同时开发，需求1部分需要第一期上线，需求2部分第二期上线，但是同时开发，代码如何管理\n5. 想查看最近都修改了那些代码，如何找记录\n6. 各种项目office文档在项目群里面满天飞，如何统一管理\n\n`git就是解决这些问题的一种解决方案`\n\n# what it is\n\ngit是一种版本控制系统,版本控制系统是一种记录若干文件内容变化，以便将来查阅特定版本修订情况的系统，有了它你就可以将某个文件回溯到之前的状态，甚至将整个项目都回退到过去某个时间点的状态。你可以比较文件的变化细节，查出最 后是谁修改了哪个地方，从而导致出现怪异问题，又是谁在何时报告了某个功能缺陷等等。使用版本控制系统通常还意味着，就算你乱来一气把整个项目中的文件改 的改删的删，你也照样可以轻松恢复到原先的样子。但额外增加的工作量却微乎其微。\n\n看下面git客户端sourectree的一个截图，可以记录每次提交的时间，描述说明，作者，修改了那些文件，修改的内容对比等等\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/34608600.png)\n\n\n\n\n\n\n## 本地版本控制系统\n\n许多人习惯用复制整个项目目录的方式来保存不同的版本，或许还会改名加上备份时间以示区别。这么做唯一的好处就是简单。不过坏处也不少：有时候会混淆所在的工作目录，一旦弄错文件丢了数据就没法撤销恢复。\n\n为了解决这个问题，人们很久以前就开发了许多种本地版本控制系统，大多都是采用某种简单的数据库来记录文件的历次更新差异。\n\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/a1648f31-ce9b-4153-abbb-44289822def9.png)\n\n## 集中化的版本控制系统\n\n接下来人们又遇到一个问题，如何让在不同系统上的开发者协同工作？于是，集中化的版本控制系统（ Centralized Version Control Systems，简称 CVCS ）应运而生。这类系统，诸如 CVS，Subversion(SVN) 以及 Perforce 等，都有一个单一的集中管理的服务器，保存所有文件的修订版本，而协同工作的人们都通过客户端连到这台服务器，取出最新的文件或者提交更新。多年以来，这 已成为版本控制系统的标准做法（见图 1-2）。\n\n\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/3604b39d-8e52-4c3b-ab0b-eee4da988d63.png)\n\n这种做法带来了许多好处，特别是相较于老式的本地 VCS 来说。现在，每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限，并且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。\n\n事分两面，有好有坏。这么做最显而易见的缺点是中央服务器的单点故障。如果宕机一小时，那么在这一小时内，谁都无法提交更新，也就无法协同工作。要 是中央服务器的磁盘发生故障，碰巧没做备份，或者备份不够及时，就还是会有丢失数据的风险。最坏的情况是彻底丢失整个项目的所有历史更改记录，而被客户端 提取出来的某些快照数据除外，但这样的话依然是个问题，你不能保证所有的数据都已经有人事先完整提取出来过。本地版本控制系统也存在类似问题，只要整个项 目的历史记录被保存在单一位置，就有丢失所有历史更新记录的风险。\n\n\n\n## 分布式版本控制系统\n\n于是分布式版本控制系统（ Distributed Version Control System，简称 DVCS ）面世了。在这类系统中，像 Git，Mercurial，Bazaar 以及 Darcs 等，客户端并不只提取最新版本的文件快照，而是把代码仓库完整地镜像下来。这么一来，任何一处协同工作用的服务器发生故障，事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作，实际上都是一次对代码仓库的完整备份（见图 1-3）。\n\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/468ad203-e5ff-4f14-9f39-c8a3be61f6c9.png)\n\n\n更进一步，许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此，你就可以在同一个项目中，分别和不同工作小组的人相互协作。你可以根据需要设定不同的协作流程，比如层次模型式的工作流，而这在以前的集中式系统中是无法实现的。\n\n\n\n# why git\n实际使用中，使用git(分布式版本控制系统)和svn(集中式版本控制系统)比较多，这里再一次集中比较一下优劣\n\n\n## 本地仓储\n\n- svn :本地开发版本+远端版本库 \n\n- git: 本地开发版本+本地版本库+远端版本库，可以本地提交代码，提供了暂存区，可以方便指定提交内容，而不是全部\n\n\n\n## 分支管理\n\n- svn：无本地分支\n\n- git：有本地分支\n\n\n\n## 代码合并\n\n- git：代码合并相对容易，冲突容易可通过第三方工具编辑解决。\n\n- svn： 冲突比较难解决，如重命名（无论文件还有目录）提交后，你本地/或是分支上 有文件重命名前的这些文件的修改或提交，在做合并操作时，你会碰上传说中难搞的***树冲突***！\n\n\n\n## 查看日志\n\n- git: 本地包含完整日志\n\n- svn: 需要从服务器拉取\n\n\n\n## git VS svn参考\n\n- [参考比较链接](https://www.cnblogs.com/dazhidacheng/p/7478438.html)\n\n          \n\n# how use it\n本篇主要介绍git客户端sourcetree的使用，git详细知识原理等请参考文章最后的参考资料(熟悉git原理和常用命令可以使用更多git功能)\n \n- [souretree客户端下载安装](https://github.com/MxABC/git-sourcetree/blob/master/download.md)\n- [SSH创建-配置-git仓库填写](https://github.com/MxABC/git-sourcetree/blob/master/SSH.md)\n\n\n\n\n## souretree使用介绍\n本篇主要使用windows环境操作souretree，mac环境操作基本一样，souretree界面布局有少许差别。\n#### git仓库创建\n`github上创建一个仓库示例`\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/58231329.png)\n\n\n\n`公司内部gitlab示例`\n点击New project，内容有项目目录，项目名称，项目描述，项目等级\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/35473105.png)\n\n\n\n点击如图中的图标复制SSH路径，然后再sourcetree中clone添加新项目即可。\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/35574946.png)\n\n\n\n\n\n#### 首次下载(clone)\nclone地址为 http或https形式，表示客户端和服务器通信通过账号密码形式\nclone地址为git@形式，表示客户端和服务器通信通过SSH形式\n\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/39282898.png)\n\n\n\n\n仓库文件介绍\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/40362072.png)\n\n\n\n.gitignore文件(隐藏文件)，表示忽略哪些文件或文件夹，不用记录到版本控制仓库\n.git文件夹(隐藏文件夹) 仓库文件夹，本地版本仓库\n\n新建2个文件，暂存提交（可以选择部分暂存提交，方便更细的写代码修改记录）\n\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/36256220.png)\n\n\n\n\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/5f601715-aaf6-4a4f-8e12-749a798f60c0.png)\n\n\n\n提交后会有个推送的提示(项目新clone首次修改提交存在不显示推送提示bug，可主动点击推送)\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/36547712.png)\n\n\n\n\n\n### 多人开发\n多人合作开发一个项目的时候，难免会遇到修改冲突的时候，这个时候合并代码的时候就需要解决冲突，如果没有好的工具，只能手动修改，或者以谁为准，然后再添加另外一个人的代码上去。\n#### 冲突解决工具Beyond Compare\nBeyond Compare是一款优秀的文件比对工具，这里使用它来帮我们解决冲突问题。\nsouretree设置外部比对工具，选择Beyond Compare\nmac OS：偏好设置，选择Diff\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/59259956.png)\n\n\n\nwindows端: 工具-\u003e选项-\u003e比较\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/61238366.png)\n\n\n\n\n冲突操作示例\n以mac下的souretree示例，windows类似\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/60044271.png)\n\n\n\nBeyondCompare工具打开的冲突对比编辑窗口\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/57199503.png)\n\n\n\n图中标注的`1`、`2`、`3`分别表示\n- `1`： 本地的代码\n- `2`：远程代码\n- `3`：默认显示的远程代码，可通过右下角选项，选择某项操作后，然后编辑下方代码，也可以直接编辑\n\n对`3`编辑完成后，按保存快捷键 ctrl+s(mac:cmd+s)，然后检查souretree中冲突代码是否修改正确，然后右冲突文件(有感叹号)右键，标记为已解决，后缀为 orig的文件为解决冲突生成的临时文件，右键选择移除即可。\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/60530927.png)\n\n\n\n### 恢复到历史版本\n\n提交回滚操作适合在最新的提交记录上面提交回滚，否则选中的记录提交回滚之后会提示很多和之前的版本文件冲突，很麻烦，这个时候可以选择重置到这次提交系列操作方案。\n\n#### step1\n选中某次需要恢复的提交，右键选择 \"将master重置到这次提交\" （master为当前分支）\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/53956722.png)\n\n\n\n然后选择如下图的使用模式\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/54266809.png)\n\n\n\n\n#### step2\nstep1完成后，只是本地分支内容恢复到我们想要的历史记录，远程代码没变，所以显示落后2个版本，在最新提交上右键，选择重置到这次提交\n\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/54729041.png)\n\n\n\n然后选择如图所示的\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/54780140.png)\n\n\n\n会出现需要新提交的改变内容，其实就删除了这个历史版本之后提交的代码，提交后即完成恢复到历史版本的目的，可以注意到，这套操作不会改变提交记录。\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/54881868.png)\n\n\n\n\n### 分支\n一般仓库默认有个主分支master，可以基于某个提交任意创建新分支。（可以类比为某个提交为基类，新分支为子类，子类继承了基类的所有，新建很多分支，就是新建了很多子类，子类互不干扰。）\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/40429175.png)\n\n\n\n#### 新建分支\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/37197428.png)\n\n\n\n创建后只是本地创建了分支，需要操作推送到远程服务器端\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/36989710.png)\n\n\n\n#### 删除分支\n不能删除当前显示的分支\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/37148548.png)\n\n\n\n\n#### 分支合并\n先切换到最终合并的分支，然后选择需要合并的提交记录，右键选择合并，合并的时候如果有冲突，会有提示，使用第三方工具解决即可。\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/38054460.png)\n\n\n\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/38038313.png)\n\n\n\n\n### 标签\ntag(标签)就是对某次commit提交记录(可能比较重要的时间点，比如某次上线代码)一个标签，方便将来查找\n选择某次commit，右键选择标签\n\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/58766764.png)\n\n\n\n然后填写标签名称和勾选推送标签后，点击按钮`添加标签`即可\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/58378979.png)\n\n\n\n\n如何查看tag\n左侧标签列表或右侧跳转到均可以\n\n![image](https://raw.githubusercontent.com/MxABC/Resource/master/git-sourcetree/58655447.png)\n\n\n\n\n# git学习参考资料\n- [git-scm](https://git-scm.com/book/zh/v1)\n- [廖雪峰Git教程链接](http://t.cn/zQ6LFwE)\n- [geeeeeeeeek](https://github.com/geeeeeeeeek/git-recipes)\n- [my-git](https://github.com/xirong/my-git)\n- [git原理入门](http://www.ruanyifeng.com/blog/2018/10/git-internals.html)\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmxabc%2Fgit-sourcetree","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmxabc%2Fgit-sourcetree","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmxabc%2Fgit-sourcetree/lists"}