# 创建、修改、暂存和提交 ## Git整体流程图 ![](./git.png) ## 创建 要将现有的软件程序纳入git管理,首先是创建版本库(或称存储库): 选中要管理的工程文件夹,右键选择“Git 在这里创建版本库”,点击“确定”,git就会在工程目录下创建“.git”文件夹,一个空白的版本库就创建成功。 ## 修改 在工程目录下,右键选择“TortoiseGit”,在“TortoiseGit”下选择“检查已修改”,会打开一个窗口来显示从上次提交到现在的所有修改。 双击文件可以查看修改的内容。 上一步创建了空白的版本库,所以这里是工程目录下的所有文件。 ### 忽略 并不是所有的文件都需要纳入Git管理,有些文件与源代码无关,只是编译生成的中间文件或者用户个人的配置,纳入管理反而增加存储库的内存。 这里拿Keil的工程举例: ![](./hello_struct.png) “./objects”文件夹下编译生成的中间文件(.o、.d、.crf)是用不到版本管理的。但是生成的hex、bin、scf文件**可以选择**记录。“./listing”下的map文件可以纳入管理。 用户自己的uvguix文件,不会影响编译结果,也没必要管理。 我们通过创建.gitignore文件,确定工作目录下哪些文件要纳入管理,哪些文件要忽略掉。 举例:在Hello目录下创建 “.gitignore” 文件,将./objects文件夹下编译生成的中间文件忽略掉,但是保留生成的hex、bin、scf文件。内容如下: ``` #Git管理忽略文件 #忽略objects文件夹下的所有文件 /objects/* #在上面基础上将hex文件纳入管理 !/objects/*.hex #在上面基础上将bin文件纳入管理 !/objects/*.bin #在上面基础上将sct文件纳入管理 !/objects/*.sct #忽略keil的用户uvguix文件 *.uvguix.* #忽略单独一个JLinkLog.txt文件 JLinkLog.txt ``` 现在回到“检查已修改”窗口,点击“刷新”按钮,./objects文件夹下只剩hex、bin、scf文件,uvguix文件消失,JLinkLog.txt文件消失。 ## 暂存和提交 ### 暂存 在其他Git客户端中可能有暂存的概念,它们提交的过程为:修改 >> 暂存 >> 提交。 暂存主要用于分批提交,比如已经开发了A、B两个功能,想要把A、B分开提交,可以先把A的文件放在暂存区,然后提交。再把B放到暂存区,然后提交。 TortoiseGitz支持勾选文件提交,因此用不到暂存功能,它的提交过程为:修改 >> 提交。 ### 提交 紧跟上面的操作,点击“提交”,弹出提交窗口: ![](./hello_submit.png) 最上面是选择提交到哪个分支,现在只有“master”分支。 然后是本次提交的日志信息,日志信息必须写,不写提交不了。日志信息应尽可能详细,和之前的readme.txt一样。 下面选择要提交的文件,这里我们点击“全部”。 最后点击提交。 ## 检出 有时候要临时回到之前的版本工作,这时候用到“检出”。 在工程目录下,右键选择“TortoiseGit”,在“TortoiseGit”下选择“切换/检出”,弹出“切换/检出”窗口,选择“提交”,点击右边三个点,选择要检出的版本,点确定,然后下面注意不需要选创建新分支(不然还得手动删除),点击确定。 回到最新更新一样操作。 ![](./git_checkout.png) ## 回退(慎用) 有时候最近的几次变更不想要了。这时候就要回退了。 在工程目录下,右键选择“TortoiseGit”,在“TortoiseGit”下选择“显示日志”,弹出“日志信息”窗口,选中要回退到的更改,右键选择“重置xxx到此版本”。点击确定,重置类型选择合适的类型: - 软重置,要删除的更改退回到暂存区 - 混合,要删除的更改退回到修改状态,适用于稍作改动再提交 - 硬重置,彻底删除更改 点击“刷新”,所选版本之后的版本消失了。 ## 贮藏更改 有些情况下,正在开发的功能被打断,需要做其他工作,例如紧急修复BUG。这时需要保留已经更改的代码, “检查已修改” >> 贮藏 >> 填写贮藏日志 >> 确定 其他工作忙完后,弹出贮藏