我们可以用一个形象的比喻来帮助理解 Git 的常见操作。
假设你正在编辑一本书:
-
工作目录:你正在编辑的实际书稿,就是你的 工作目录。在这里,你可以进行修改、添加和删除内容。
-
暂存区(Staging Area):每当你觉得某部分内容修改完成,可以准备提交时,你将这些修改部分先放入一个 草稿盒 中,这就是 暂存区。只有在草稿盒中的内容才会被记录在 Git 的历史中。
-
Git 仓库:当你认为整个章节已经完成,并且草稿已经准备好,你将草稿提交给 Git 保存,这就是 Git 仓库,保存了所有提交记录,形成了一个版本控制历史。
下面是日常操作的 Git 命令,比喻中的操作会通过这些命令来完成:
1. git init
:创建一本空白书籍
想象一下,你刚开始写一本书,决定使用 Git 来管理你的书稿。你需要初始化一个新的 Git 仓库。
git init
这就像是在你的桌面上放了一本空白的书,准备开始写作。
2. git status
:检查书稿的进度
你想查看目前书稿的进展情况,看看哪些内容已经修改,哪些还没有整理好。用 git status
来查看当前文件的状态。
git status
这就像是你翻开书稿,检查哪些部分已经编辑过,哪些部分还没有处理。
3. git add
:将修改放进草稿盒
当你完成了一些内容修改并想提交时,你先将这些修改放进 草稿盒,也就是 暂存区。通过 git add
将工作目录中的修改加入暂存区。
git add <file_name>
这就像你将某个已修改的章节放入草稿盒,准备好交给 Git 来保存。
如果想添加所有文件的更改,可以使用:
git add .
4. git commit
:将草稿提交到 Git 历史
现在你已经完成了某个章节并且放入草稿盒,准备将它保存到历史中。你用 git commit
将草稿盒中的内容提交到 Git 仓库。
git commit -m "修改了第一章"
这就像是你将草稿交给出版社,记录下这次提交的内容(通过 -m
参数写下提交消息)。
5. git log
:查看书籍的版本历史
想查看自己修改过的所有章节和历史?你可以使用 git log
查看 Git 仓库中的历史记录。这样你就能知道哪些章节已经编辑完成,提交了哪些内容。
git log
这就像是翻阅书籍的历史记录,查看每次修改的版本和修改内容。
6. git diff
:查看未提交的修改
如果你想知道自己的书稿在上一次提交之后有哪些变化,使用 git diff
查看修改了哪些内容。
git diff
这就像是你翻阅书稿,查看最近哪些部分有新增或者删除的内容。
7. git reset
:回退到某个版本
如果你发现某些修改不合适,想要恢复到某个版本的书稿状态,可以用 git reset
将工作目录和暂存区恢复到之前的状态。
git reset --hard <commit_id>
这就像你决定回到某个之前的章节版本,抛弃当前章节的修改,重新开始。
8. git pull
:从出版社获取最新的书籍版本
如果你和其他人共同编辑一本书,而其他人对书稿进行了更新,你可以使用 git pull
从远程仓库获取最新版本的内容。
git pull
这就像是你去出版社拿到最新的章节更新,查看其他人对书稿的修改,并将其合并到你的版本中。
9. git push
:将你修改后的书籍提交到出版社
当你编辑完书稿并希望将它提交到出版社(远程仓库)时,使用 git push
。这会把你的修改同步到远程 Git 仓库,让其他人看到。
git push
这就像是你将自己完成的章节送交出版社,让其他编辑人员看到并可以进一步修改。
10. git clone
:复制一本书籍的副本
如果你想要从其他地方获取一本完整的书的副本,可以使用 git clone
。这会将远程仓库的内容下载到你本地,作为一个新副本开始编辑。
git clone <repository_url>
这就像是你从出版社拿到了这本书的副本,准备开始你的编辑工作。
11. git branch
:分支编辑
有时候你可能想在不同的章节或部分上进行不同的编辑工作,而不影响主书稿。这时,你可以使用分支功能。分支就像你为每个章节或任务开辟了一个独立的编辑空间,等完成后再合并回主书稿。
git branch <branch_name> # 创建新分支
git checkout <branch_name> # 切换到新分支
12. git merge
:合并不同编辑的章节
当你在不同分支上编辑书籍的不同部分时,你最终需要将这些修改合并回主书稿。使用 git merge
可以将某个分支的修改合并到当前分支。
git merge <branch_name>
这就像你将不同编辑者修改的章节合并到一起,形成最终版本的书稿。
通过这些命令,你可以像管理一本书籍一样,管理你的代码、查看修改历史、和其他开发者合作、并确保每次修改都有记录,方便回溯和管理。