现在我们来真正完成一次 Git Commit。为了让流程更容易理解,假设我们已经有一个叫做 git-demo 的 Git Repository,并且在里面创建了一个文件:
hello.txt文件内容可以很简单:
Hello Git创建文件后,可以先运行:
git status如果这是一个刚创建的新文件,Git 通常会显示它是一个 Untracked file。这表示 Git 已经看到了这个文件,但还没有开始正式记录它。
输出可能类似:
Untracked files:
hello.txt接下来,我们希望把这个文件放进下一次 Commit,就可以使用:
git add hello.txtgit add 的作用不是“提交代码”,而是把修改加入暂存区。执行之后,再运行一次:
git status你会发现 hello.txt 的状态发生了变化,通常会出现在类似下面的区域:
Changes to be committed:
new file: hello.txt这表示文件已经准备好进入下一次 Commit。
一次添加多个文件
如果项目中修改了多个文件,可以在 git add 后面写多个文件名:
git add index.html style.css app.js如果希望把当前目录中所有修改都加入暂存区,可以使用:
git add .这里的 . 表示当前目录。
git add . 在日常开发中非常常见,因为它可以一次添加多个修改。不过初学时最好养成一个习惯:在执行它之前先看一下 git status,确认没有把不想提交的文件一起加进去。
例如,有时项目目录里可能包含:
debug.log
password.txt
temporary-file.txt这些文件并不一定应该提交到 Git。所以即使 git add . 很方便,也不代表每次都应该无脑使用。
知识测验
git add . 前最值得先做什么?
创建 Commit
文件加入暂存区后,就可以创建 Commit。最常用的方式是:
git commit -m "Add hello file"其中 -m 表示后面直接提供一条 Commit Message,也就是对这次修改的简短说明。
执行成功后,你可能会看到类似:
1 file changed, 1 insertion(+)
create mode 100644 hello.txt此时这次修改就已经正式保存到了本地 Git 历史中。
Commit Message 不需要写得很长,但应该让人能够大致知道这次修改做了什么。例如:
Add login page
Fix login error
Update README
Remove unused code不推荐使用过于模糊的信息,例如:
update
change
test
aaa因为几周以后再看到这些 Commit 时,你很可能已经不知道它们具体做了什么。
修改文件后再次提交
假设我们继续修改 hello.txt:
Hello Git
Git is easy to learn.再次运行:
git statusGit 会告诉你这个文件已经被修改,但修改还没有进入暂存区。
这时仍然需要先执行:
git add hello.txt然后再创建新的 Commit:
git commit -m "Update hello message"这样 Git 历史中就会有两次独立的 Commit:
Add hello file
Update hello message这体现了一个非常重要的概念:Commit 不是保存整个项目的一次性操作,而是在不断记录项目的发展过程。
一套常用操作流程
日常开发中,一个最基础的流程通常是:
git status先确认有哪些修改,然后:
git add .把准备提交的修改加入暂存区,再次检查:
git status确认没有问题后:
git commit -m "Describe your change"这套流程可以概括为:
对于初学者来说,多执行一次 git status 并不是浪费时间,反而可以帮助你逐渐理解 Git 当前正在做什么。
第一次 Commit 终端
为 hello.txt 创建第一次 Commit,不要暂存 password.txt。
—
还没有 Commit
为 hello.txt 创建第一次 Commit,不要暂存 password.txt。Commit 只保存在本地
这里有一个非常重要的区别需要提前说明:执行 git commit 后,Commit 默认只保存在你的电脑上,并不会自动上传到 GitHub。
也就是说:
| 操作 | 保存位置 |
|---|---|
git commit | 本地 Git Repository |
而把代码上传到 GitHub,需要之后使用:
git push后面的远程仓库内容会详细介绍 git push。
练习
在一个新仓库中创建 hello.txt,完成第一次 Commit;然后增加第二行内容并完成第二次 Commit。写下全部命令,并为两次提交设计清楚的 Message。