Git基本操作(二):add与commit,把文件交给Git管理

Git基本操作(二):add与commit,把文件交给Git管理 1. 问题场景你已经在一个文件夹里执行了git init建好了仓库。接着在里面写了一个README.txt文件满心欢喜地以为 Git 已经在帮你记录了。但实际上这时候 Git 还不知道这个文件的存在。怎么才能让 Git 正式接手开始跟踪文件的变化这就是git add和git commit要做的事。2. 核心命令git add 文件名将指定文件从工作区添加到暂存区。相当于告诉 Git“这个文件的改动我准备保存了”。git add .将当前目录下所有改动新增、修改、删除一次性全部添加到暂存区。使用前要确认一下git status避免把不该提交的文件一并加进去。git commit -m 提交说明将暂存区里的所有内容打包成一个历史快照永久存入版本库。-m后面的双引号里是本次提交的简要描述必须写而且要写清楚。3. 实战演示我们继续用上一篇创建的myproject仓库来演示。如果你还没有这个仓库就新建一个并初始化。3.1 第一次提交进入仓库目录创建一个ReadMe文件并写入两行内容$cdmyproject $echohello gitReadMe $echohello git againReadMe用cat看一眼文件内容确认$catReadMe hellogithellogitagain现在用git add把文件加入暂存区$gitaddReadMe这一步没有任何输出通常意味着成功了。接着执行git commit$gitcommit-mMy first commit: add ReadMe file[master(root-commit)c614289]My first commit:addReadMefile1filechanged,2insertions()create mode100644ReadMe输出信息告诉我们这次提交生成了一串 commit id这里是c614289你的会不同修改了一个文件新插入了两行内容。3.2 提交说明怎么写-m后面的提交说明不是随便写写的它和代码一样重要。一个好的提交说明能让半年后的你自己或同事立刻明白这次提交做了什么。一般建议用英文简明扼要格式可以统一为“动词 名词短语”比如add user login modulefix bug in payment calculationupdate README with install steps如果一次提交改了太多东西说明你的提交粒度太大了尽量让一次提交只做一件逻辑完整的事。3.3 多次 add一次 commit暂存区的存在让你可以分几次把不同的文件加入最后一次性提交。比如在myproject里再新建两个文件$touchfile1.txt file2.txt分开添加然后一起提交$gitaddfile1.txt $gitaddfile2.txt $gitcommit-madd two new files[master 0a3b7d2]addtwo new files2files changed,0insertions(),0deletions(-)create mode100644file1.txt create mode100644file2.txt也可以直接用git add file1.txt file2.txt一次加多个或者用git add .把所有新增文件都加上。但git add .范围比较宽建议先在提交前用git status看一眼到底加了哪些文件。4. 查看状态与差异这两个命令在你日常使用中的频率可能比commit本身还要高。4.1git status—— 看状态随时执行它Git 会告诉你三件事工作区里有未暂存的修改吗暂存区里有待提交的内容吗有哪些文件还没被跟踪$gitstatus On branch master nothing to commit, working tree clean当工作区和暂存区都干净时输出如上。如果你修改了ReadMe但还没 add会显示$echoa new lineReadMe $gitstatus On branch master Changes not stagedforcommit:(usegit add file...to update what will be committed)(usegit checkout -- file...to discard changesinworking directory)modified: ReadMe no changes added to commit(usegit addand/orgit commit -a)Git 会明确提示你哪些文件被修改了并且告诉你下一步可以怎么做。4.2git diff—— 看具体改了什么git status只告诉你“有改动”git diff会展示出具体的改动内容。不加参数时它比较的是工作区和暂存区如果暂存区为空就是和最新一次提交比较。$gitdiffdiff--gita/ReadMe b/ReadMe index e69de29..3b18e51100644--- a/ReadMe b/ReadMe -2,2 3,3 hellogithellogitagain a new line前面带的绿色行是新增的带-的红色行是删除的这里没有。这个输出格式看起来很原始但习惯之后非常高效。5. 注意事项正确流程是固定的修改文件 →git add→git commit。跳过add直接commitGit 什么都不会提交。git add .要谨慎它会把所有改动一次加进去很容易把调试用的临时文件、本地配置等不该提交的东西也卷进去。建议先git status看一眼再用git add精确指定文件或者用.gitignore过滤后面会讲。commit id 是唯一标识每一次提交都有一个独一无二的 hash 值如c614289它是你回溯版本时的钥匙。不需要记完整Git 允许只取前几位。6. 要点总结git add是把修改从工作区放入暂存区的动作相当于“挑选”。git commit -m 说明是把暂存区的内容正式存入版本库形成历史节点。日常工作流就三个动作修改 → add → commit。git status是使用频率最高的命令随时用它来掌握当前仓库状态。提交说明要写清楚为未来的自己和协作者负责。7. 练习题进入上一篇创建的learning-git仓库新建一个文本文件notes.txt写入任意内容。用git add添加该文件然后用git commit提交提交说明要清晰。再创建两个文件a.txt和b.txt练习多次 add、一次 commit。修改notes.txt然后分别在 add 前和 add 后运行git status和git diff观察输出变化。故意不 add 就执行git commit看看 Git 会给出什么提示。