# Git使用指南 ## 名词解释 - **仓库(Repository)**:Git项目的存储位置,包含所有文件和历史记录 - **分支(Branch)**:独立的开发线,用于隔离不同的开发工作 - **提交(Commit)**:代码的快照,包含修改内容和提交信息 - **远端(Remote)**:远程仓库,通常位于服务器上 - **克隆(Clone)**:从远程仓库复制一个完整的本地仓库 - **推送(Push)**:将本地提交推送到远程仓库 - **拉取(Pull)**:从远程仓库拉取更新到本地 - **合并(Merge)**:将一个分支的更改合并到另一个分支 - **冲突(Conflict)**:当两个分支对同一文件的同一部分进行了不同的修改时产生 - **HEAD**:当前分支的最新提交 - **暂存区(Staging Area)**:临时保存修改的区域,位于工作区和仓库之间 - **工作区(Working Directory)**:本地修改文件的目录 - **索引(Index)**:与暂存区同义,用于暂存要提交的更改 - **提交哈希(Commit Hash)**:每个提交的唯一标识符,由SHA-1算法生成 - **标签(Tag)**:给特定提交添加的标记,通常用于版本发布 - **快照(Snapshot)**:Git存储的文件状态,而非文件差异 - **重基(Rebase)**:将一个分支的提交应用到另一个分支上 - **变基(Rebase)**:与重基同义,用于重新组织提交历史 - **分叉(Fork)**:从他人的仓库创建一个自己的副本 - **Pull Request**:请求将自己的更改合并到他人的仓库 - **工作流(Workflow)**:团队使用Git的流程和规范 - **子模块(Submodule)**:在一个仓库中引用另一个仓库 - **Gitignore**:指定Git应忽略的文件和目录 - **Reflog**:Git操作的日志,用于恢复意外丢失的提交 - **Cherry-pick**:从一个分支选择特定的提交应用到另一个分支 - **Bisect**:通过二分查找定位引入错误的提交 - **Stash**:暂时保存未提交的更改,以便在不同分支间切换 - **Subtree**:将一个仓库作为另一个仓库的子目录 ## 远端与本地分支 ### 本地分支操作(使用TortoiseGit UI) 1. **创建新分支** - 在项目文件夹上右键点击,选择 **TortoiseGit → 分支/标签 → 创建分支** - 在弹出的对话框中,输入分支名称 - 选择基于哪个提交创建分支(默认为当前HEAD) - 点击 **确定** 按钮 2. **切换分支** - 在项目文件夹上右键点击,选择 **TortoiseGit → 分支/标签 → 切换/检出** - 在弹出的对话框中,从分支列表中选择要切换的分支 - 点击 **确定** 按钮 3. **创建并切换到新分支** - 在项目文件夹上右键点击,选择 **TortoiseGit → 分支/标签 → 创建分支** - 在弹出的对话框中,输入分支名称 - 勾选 **切换到新分支** 选项 - 点击 **确定** 按钮 4. **查看本地分支** - 在项目文件夹上右键点击,选择 **TortoiseGit → 分支/标签 → 分支** - 在弹出的对话框中,可以看到所有本地分支和远程分支 - 当前分支会以加粗显示 5. **删除本地分支** - 在项目文件夹上右键点击,选择 **TortoiseGit → 分支/标签 → 分支** - 在弹出的对话框中,选择要删除的本地分支 - 点击 **删除** 按钮 - 在确认对话框中,点击 **确定** 按钮 6. **强制删除本地分支** - 在项目文件夹上右键点击,选择 **TortoiseGit → 分支/标签 → 分支** - 在弹出的对话框中,选择要强制删除的本地分支 - 点击 **删除** 按钮 - 在确认对话框中,勾选 **强制删除** 选项 - 点击 **确定** 按钮 ### 远端分支操作(使用TortoiseGit UI) 1. **添加远程仓库** - 在项目文件夹上右键点击,选择 **TortoiseGit → 设置** - 在左侧导航栏中选择 **Git → 远端** - 点击 **添加** 按钮 - 在弹出的对话框中,输入远端名称和远程仓库URL - 点击 **确定** 按钮 2. **查看远程仓库** - 在项目文件夹上右键点击,选择 **TortoiseGit → 设置** - 在左侧导航栏中选择 **Git → 远端** - 可以看到所有已添加的远程仓库及其URL 3. **从远程仓库拉取更新** - 在项目文件夹上右键点击,选择 **TortoiseGit → 拉取** - 在弹出的对话框中,选择远程仓库和分支 - 点击 **确定** 按钮 4. **推送本地分支到远程仓库** - 在项目文件夹上右键点击,选择 **TortoiseGit → 推送** - 在弹出的对话框中,选择本地分支和远程分支 - 点击 **确定** 按钮 5. **推送本地分支并设置上游分支** - 在项目文件夹上右键点击,选择 **TortoiseGit → 推送** - 在弹出的对话框中,选择本地分支 - 在远程分支输入框中输入分支名称 - 勾选 **设置 upstream/tracking 参考** 选项 - 点击 **确定** 按钮 6. **查看远程分支** - 在项目文件夹上右键点击,选择 **TortoiseGit → 分支/标签 → 分支** - 在弹出的对话框中,选择 **远程分支** 标签页 - 可以看到所有远程分支 7. **查看所有分支(本地和远程)** - 在项目文件夹上右键点击,选择 **TortoiseGit → 分支/标签 → 分支** - 在弹出的对话框中,可以看到本地分支和远程分支 8. **删除远程分支** - 在项目文件夹上右键点击,选择 **TortoiseGit → 推送** - 在弹出的对话框中,选择远程仓库 - 在 **本地分支** 下拉菜单中选择 **<无>** - 在 **远程分支** 输入框中输入要删除的远程分支名称 - 点击 **确定** 按钮 - 在确认对话框中,点击 **确定** 按钮 ### 分支合并(使用TortoiseGit UI) 1. **切换到目标分支** - 在项目文件夹上右键点击,选择 **TortoiseGit → 分支/标签 → 切换/检出** - 在弹出的对话框中,选择目标分支 - 点击 **确定** 按钮 2. **合并源分支到目标分支** - 在项目文件夹上右键点击,选择 **TortoiseGit → 合并** - 在弹出的对话框中,选择要合并的源分支 - 点击 **确定** 按钮 3. **解决冲突** - 如果合并过程中出现冲突,TortoiseGit会显示冲突文件列表 - 双击冲突文件,使用TortoiseGit的冲突解决工具解决冲突 - 解决完冲突后,保存文件 4. **提交合并结果** - 在项目文件夹上右键点击,选择 **TortoiseGit → 提交** - 在弹出的对话框中,确认提交信息 - 点击 **确定** 按钮 ## 日志分析 ### 查看提交历史(使用TortoiseGit UI) 1. **查看完整提交历史** - 在项目文件夹上右键点击,选择 **TortoiseGit → 显示日志** - 在弹出的对话框中,可以看到完整的提交历史 2. **查看简洁提交历史** - 在项目文件夹上右键点击,选择 **TortoiseGit → 显示日志** - 在日志对话框中,点击 **视图** 菜单 - 选择 **紧凑模式** 3. **查看最近N个提交** - 在项目文件夹上右键点击,选择 **TortoiseGit → 显示日志** - 在日志对话框中,点击 **限制** 按钮 - 在弹出的对话框中,设置 **限制数量** - 点击 **确定** 按钮 4. **查看提交历史和更改内容** - 在项目文件夹上右键点击,选择 **TortoiseGit → 显示日志** - 在日志对话框中,选择一个提交 - 在右侧面板中,可以看到该提交的更改内容 5. **查看特定文件的提交历史** - 在文件上右键点击,选择 **TortoiseGit → 显示日志** - 在弹出的对话框中,可以看到该文件的提交历史 6. **查看特定作者的提交历史** - 在项目文件夹上右键点击,选择 **TortoiseGit → 显示日志** - 在日志对话框中,点击 **限制** 按钮 - 在弹出的对话框中,设置 **作者** 过滤条件 - 点击 **确定** 按钮 7. **查看特定时间段的提交历史** - 在项目文件夹上右键点击,选择 **TortoiseGit → 显示日志** - 在日志对话框中,点击 **限制** 按钮 - 在弹出的对话框中,设置 **日期范围** - 点击 **确定** 按钮 ### 查看更改(使用TortoiseGit UI) 1. **查看工作区和暂存区的差异** - 在项目文件夹上右键点击,选择 **TortoiseGit → 检查修改** - 在弹出的对话框中,可以看到工作区的修改 2. **查看暂存区和HEAD的差异** - 在项目文件夹上右键点击,选择 **TortoiseGit → 检查修改** - 在弹出的对话框中,选择 **已暂存的修改** 标签页 3. **查看工作区和HEAD的差异** - 在项目文件夹上右键点击,选择 **TortoiseGit → 比较差异** - 在弹出的对话框中,选择 **与基础版本比较** 4. **查看两个提交之间的差异** - 在项目文件夹上右键点击,选择 **TortoiseGit → 显示日志** - 在日志对话框中,选择两个提交 - 右键点击,选择 **比较差异** 5. **查看两个分支之间的差异** - 在项目文件夹上右键点击,选择 **TortoiseGit → 分支/标签 → 分支** - 在弹出的对话框中,选择两个分支 - 右键点击,选择 **比较差异** ## 回退 ### 回退到之前的提交(使用TortoiseGit UI) 1. **软回退:保留工作区和暂存区的更改** - 在项目文件夹上右键点击,选择 **TortoiseGit → 显示日志** - 在日志对话框中,选择要回退到的提交 - 右键点击,选择 **重置"master"到这个版本** - 在弹出的对话框中,选择 **软重置** 选项 - 点击 **确定** 按钮 2. **混合回退:保留工作区的更改,清空暂存区** - 在项目文件夹上右键点击,选择 **TortoiseGit → 显示日志** - 在日志对话框中,选择要回退到的提交 - 右键点击,选择 **重置"master"到这个版本** - 在弹出的对话框中,选择 **混合重置** 选项(默认) - 点击 **确定** 按钮 3. **硬回退:丢弃工作区和暂存区的更改** - 在项目文件夹上右键点击,选择 **TortoiseGit → 显示日志** - 在日志对话框中,选择要回退到的提交 - 右键点击,选择 **重置"master"到这个版本** - 在弹出的对话框中,选择 **硬重置** 选项 - 点击 **确定** 按钮 ### 回退到远程分支的状态(使用TortoiseGit UI) 1. **强制本地分支与远程分支保持一致** - 在项目文件夹上右键点击,选择 **TortoiseGit → 拉取** - 在弹出的对话框中,选择远程仓库和分支 - 勾选 **强制覆盖本地更改** 选项 - 点击 **确定** 按钮 ### 撤销修改(使用TortoiseGit UI) 1. **撤销工作区的修改(未add)** - 在文件上右键点击,选择 **TortoiseGit → 还原** - 在弹出的对话框中,点击 **确定** 按钮 2. **撤销暂存区的修改(已add但未commit)** - 在项目文件夹上右键点击,选择 **TortoiseGit → 检查修改** - 在弹出的对话框中,选择 **已暂存的修改** 标签页 - 选择要撤销的文件 - 点击 **还原** 按钮 - 在确认对话框中,点击 **确定** 按钮 3. **撤销最近的提交,保留更改** - 在项目文件夹上右键点击,选择 **TortoiseGit → 显示日志** - 在日志对话框中,选择最近的提交 - 右键点击,选择 **重置"master"到这个版本** - 在弹出的对话框中,选择 **混合重置** 选项 - 点击 **确定** 按钮 4. **撤销最近的提交,丢弃更改** - 在项目文件夹上右键点击,选择 **TortoiseGit → 显示日志** - 在日志对话框中,选择最近的提交 - 右键点击,选择 **重置"master"到这个版本** - 在弹出的对话框中,选择 **硬重置** 选项 - 点击 **确定** 按钮 5. **撤销特定文件的提交** - 在文件上右键点击,选择 **TortoiseGit → 显示日志** - 在日志对话框中,选择要恢复到的提交 - 右键点击,选择 **还原到此版本** - 在弹出的对话框中,点击 **确定** 按钮 ## 危险的回退 ### 注意事项(使用TortoiseGit UI) 1. **硬回退的风险**:使用TortoiseGit的 **硬重置** 操作会永久丢弃未提交的更改,无法恢复 2. **推送已回退的分支**:如果已经将分支推送到远程仓库,回退后再次推送需要使用 **强制推送** 选项,这会覆盖远程分支的历史 3. **共享分支的回退**:如果分支被多人共享,回退可能会导致其他开发者的工作丢失 4. **标签的影响**:回退操作不会移动标签,标签仍然指向原来的提交 ### 安全回退策略(使用TortoiseGit UI) 1. **创建备份分支**:在回退前创建一个备份分支,保存当前状态 - 在项目文件夹上右键点击,选择 **TortoiseGit → 分支/标签 → 创建分支** - 在弹出的对话框中,输入备份分支名称 - 点击 **确定** 按钮 2. **使用revert**:对于已经推送的提交,使用 **还原** 操作而不是 **重置**,这样可以创建一个新的提交来撤销之前的更改,而不是修改历史 - 在项目文件夹上右键点击,选择 **TortoiseGit → 显示日志** - 在日志对话框中,选择要撤销的提交 - 右键点击,选择 **还原此提交** - 在弹出的对话框中,点击 **确定** 按钮 3. **沟通协作**:如果分支被多人共享,在回退前应与团队成员沟通,确保所有人都了解更改 4. **谨慎使用force推送**:只有在确定不会影响其他开发者的情况下,才使用 **强制推送** - 在项目文件夹上右键点击,选择 **TortoiseGit → 推送** - 在弹出的对话框中,勾选 **强制推送** 选项 - 点击 **确定** 按钮 5. **定期备份**:定期备份重要的分支和提交,以防止意外丢失 ## 最佳实践 1. **定期提交**:将工作分解为小的、有意义的提交 2. **写清晰的提交信息**:提交信息应该简洁明了,描述更改的内容和原因 3. **使用分支**:为不同的功能或修复创建独立的分支 4. **定期拉取**:定期从远程仓库拉取更新,避免冲突 5. **测试后再推送**:在推送前确保代码通过测试 6. **使用.gitignore**:忽略不需要版本控制的文件 7. **定期清理**:删除不需要的分支,保持仓库整洁 8. **学习Git工作流**:了解并遵循团队的Git工作流规范 通过遵循这些最佳实践,可以更有效地使用Git,减少错误和冲突,提高开发效率。