🛠️ Git 基本操作
- git init——初始化仓库
要使用 Git 进行版本管理,必须先初始化仓库。Git 使用
git init命令进行初始化。
bashCopy
$ mkdir git-tutorial $ cd git-tutorial $ git init Initialized empty Git repository in /Users/hirocaster/github/github-book/git-tutorial/.git/
- 初始化成功后,执行
git init命令的目录下会生成.git目录,存储管理当前目录内容所需的仓库数据。 .git目录的内容称为“附属于该仓库的工作树”。文件的编辑等操作在工作树中进行,然后记录到仓库中,以此管理文件的历史快照。
- git status——查看仓库的状态
git status 命令用于显示 Git 仓库的状态。
bashCopy
$ git status # On branch master # # Initial commit # nothing to commit (create/copy files and use "git add" to track)
- 结果显示当前处于
master分支下,且没有可提交的内容。 - 提交(Commit)是指“记录工作树中所有文件的当前状态”。
- git add——向暂存区中添加文件
如果只是用 Git 仓库的工作树创建了文件,该文件并不会被记入 Git 仓库的版本管理对象中。需要使用
git add命令将其加入暂存区(Stage 或 Index)。
bashCopy
$ git add README.md $ git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # new file: README.md #
- 将文件加入暂存区后,
git status命令的显示结果会发生变化。
- git commit——保存仓库的历史记录
git commit 命令可以将当前暂存区中的文件实际保存到仓库的历史记录中。
记述一行提交信息
bashCopy
$ git commit -m "First commit" \lbrack master (root-commit) 9f129ba\rbrack First commit 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 README.md
-m参数后的“First commit”是提交信息,是对提交的概述。
记述详细提交信息
如果不加
-m,直接执行git commit命令,编辑器会启动,显示如下结果。
textCopy
# Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # new file: README.md #
- 提交信息的格式:
- 第一行:用一行文字简述提交的更改内容。
- 第二行:空行。
- 第三行以后:记述更改的原因和详细内容。
- git log——查看提交日志
git log 命令可以查看以往仓库中提交的日志。
bashCopy
$ git log commit 9f129bae19b2c82fb4e98cde5890e52a6c546922 Author: hirocaster <hohtsuka@gmail.com> Date: Sun May 5 16:06:49 2013 +0900 First commit
commit栏旁边显示的是指向该提交的哈希值。Author栏显示用户名和邮箱地址,Date栏显示提交执行的日期和时间。
只显示提交信息的第一行
bashCopy
$ git log --pretty=short commit 9f129bae19b2c82fb4e98cde5890e52a6c546922 Author: hirocaster <hohtsuka@gmail.com> First commit
显示文件的改动
bashCopy
$ git log -p README.md
- git diff——查看更改前后的差别
git diff 命令可以查看工作树、暂存区、最新提交之间的差别。
bashCopy
$ git diff diff --git a/README.md b/README.md index e69de29..cb5dc9f 100644 --- a/README.md ++ b/README.md @@ -0,0 +1 @@ *$ Git教程
+号标出的是新添加的行,-号标出的是被删除的行。
🌿 分支的操作
- git branch——显示分支一览表
git branch 命令可以显示分支名列表,并确认当前所在分支。
bashCopy
$ git branch - master
master分支左侧标有*,表示当前所在分支。
- git checkout -b——创建、切换分支
如果想以当前分支为基础创建新的分支,需要使用
git checkout -b命令。
bashCopy
$ git checkout -b feature-A Switched to a new branch 'feature-A'
切换到 feature-A 分支并进行提交
bashCopy
$ git branch - feature-A master
feature-A分支左侧标有*,表示当前分支为feature-A。
- git merge——合并分支
假设
feature-A已经实现完毕,想要将其合并到主干分支master中。
bashCopy
$ git checkout master Switched to branch 'master' $ git merge --no-ff feature-A Merge made by the 'recursive' strategy. README.md | 2 ++ 1 file changed, 2 insertions(+)
--no-ff参数用于在历史记录中明确记录下本次分支合并。
- git log --graph——以图表形式查看分支
bashCopy
$ git log --graph
⏪ 更改提交的操作
- git reset——回溯历史版本
Git 可以灵活操作历史版本。借助分散仓库的优势,可以在不影响其他仓库的前提下对历史版本进行操作。
bashCopy
$ git reset --hard fd0cbf0d4a25f747230694d95cac1be72d33441d HEAD is now at fd0cbf0 Add index
git reset --hard命令可以将仓库的HEAD、暂存区、当前工作树回溯到指定状态。
- 创建 fix-B 分支
bashCopy
$ git checkout -b fix-B Switched to a new branch 'fix-B'
- 在
README.md文件中添加一行文字并提交。
bashCopy
$ git add README.md $ git commit -m "Add fix-B" # 🛠️ Git 分支管理与远程仓库操作 ## 📂 当前状态与目标 - **当前状态**:`fix-B` 分支已完成提交,状态如图 4.5 所示。 - **目标状态**:主干分支(`master`)合并 `feature-A` 分支后,再合并 `fix-B` 分支的修改,状态如图 4.6 所示。   ## ⏪ 推进至 `feature-A` 分支合并后的状态 1. **查看操作日志**:使用 `git reflog` 命令查看仓库操作日志。 ```bash $ git reflog
- 恢复历史状态:找到
feature-A分支合并后的哈希值(如83b0b94),使用git reset --hard恢复到该状态。bashCopy
$ git checkout master $ git reset --hard 83b0b94 - 恢复后的状态:如图 4.7 所示。
!\lbrack 图4.7\rbrack (img-7.jpeg)
⚔️ 消除冲突
- 合并
fix-B分支:执行合并命令,发现README.md文件冲突。bashCopy
$ git merge --no-ff fix-B - 解决冲突:打开
README.md文件,修改冲突部分。markdownCopy
# Git教程 - feature-A - fix-B - 提交解决结果:使用
git add和git commit提交更改。bashCopy
$ git add README.md $ git commit -m "Fix conflict"
✏️ 修改提交信息
- 使用
git commit --amend:修改上一条提交信息为Merge branch 'fix-B'。bashCopy
$ git commit --amend - 查看提交日志:使用
git log --graph确认修改。
!\lbrack 图4.8\rbrack (img-8.jpeg)
🔄 压缩历史(git rebase)
- 创建
feature-C分支:添加内容并故意留下拼写错误。bashCopy
$ git checkout -b feature-C $ git commit -am "Add feature-C" - 修正拼写错误:修改
README.md文件并提交。bashCopy
$ git commit -am "Fix typo" - 压缩提交历史:使用
git rebase -i HEAD~2将Fix typo合并到Add feature-C中。bashCopy
$ git rebase -i HEAD~2 - 查看压缩后的历史:使用
git log --graph确认。
🌐 合并至 master 分支
- 合并
feature-C分支:将feature-C合并到master。bashCopy
$ git checkout master $ git merge --no-ff feature-C
🚀 推送至远程仓库
- 添加远程仓库:使用
git remote add设置远程仓库。bashCopy
$ git remote add origin git@github.com:github-book/git-tutorial.git - 推送至
master分支:使用git push -u origin master推送内容。bashCopy
$ git push -u origin master - 推送至其他分支:创建并推送
feature-D分支。bashCopy
$ git checkout -b feature-D $ git push -u origin feature-D
📥 从远程仓库获取
- 克隆远程仓库:在另一个目录下克隆远程仓库。
bashCopy
$ git clone git@github.com:github-book/git-tutorial.git - 查看分支信息:使用
git branch -a查看所有分支。bashCopy
$ git branch -a
🌿 Git 分支操作与协作
显示本地与远程仓库的分支信息
通过以下命令可以查看本地仓库和远程仓库的分支信息:
bashCopy
$ git branch -a
结果分析:
如果结果中显示了 remotes/origin/feature-D,说明远程仓库中已经存在 feature-D 分支。
获取远程的 feature-D 分支
将远程仓库的 feature-D 分支获取到本地仓库:
bashCopy
$ git checkout -b feature-D origin/feature-D
参数说明:
-b参数后为本地新建分支的名称,通常与远程分支同名以便于理解。origin/feature-D指定了远程仓库origin的feature-D分支为来源。
结果:
textCopy
Branch feature-D set up to track remote branch feature-D from origin. Switched to a new branch 'feature-D'
向本地的 feature-D 分支提交更改
假设我们是另一名开发者,需要在 README.md 文件中添加一行文字并提交更改。
- 查看更改内容:
bashCopy
$ git diff
输出示例:
textCopy
diff --git a/README.md b/README.md index af647fd..30378c9 100644 --- a/README.md +++ b/README.md @@ -3,3 +3,4 @@ - feature-A - fix-B - feature-C + - feature-D
- 提交更改:
bashCopy
$ git commit -am "Add feature-D"
结果:
textCopy
\lbrack feature-D ed9721e\rbrack Add feature-D 1 file changed, 1 insertion(+)
推送 feature-D 分支
将本地的 feature-D 分支推送到远程仓库:
bashCopy
$ git push
输出示例:
textCopy
Counting objects: 5, done. Delta compression using up to 8 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 281 bytes, done. Total 3 (delta 1), reused 0 (delta 0) To git@github.com:github-book/git-tutorial.git c30f98b..ed9721e feature-D -> feature-D
使用 git pull 获取最新的远程仓库分支
如果本地仓库的 feature-D 分支未进行任何提交,而远程仓库的 feature-D 分支已有最新提交,可以使用以下命令更新本地分支:
bashCopy
$ git pull origin feature-D
输出示例:
textCopy
remote: Counting objects: 5, done. remote: Compressing objects: 100% (1/1), done. remote: Total 3 (delta 1), reused 3 (delta 1) Unpacking objects: 100% (3/3), done. From github.com:github-book/git-tutorial * branch feature-D -> FETCH_HEAD First, rewinding head to replay your work on top of it... Fast-forwarded feature-D to ed9721e686f8c588e55ec6b8071b669f411486b8.
协作建议:
多名开发者在同一分支中作业时,建议频繁进行 push 和 pull 操作,以减少冲突的发生。
📚 深入学习 Git 的资料
1. Pro Git
- 作者:Scott Chacon(GitHub 公司)
- 特点:零基础学习资料,基于知识共享协议(CC BY-NC-SA 3.0),提供多语言版本。
- 链接:Pro Git
2. LearnGitBranching
- 特点:注重树形结构的学习方式,适合初学者,支持多语言切换。
- 链接:LearnGitBranching
3. tryGit
- 特点:在 Web 上边操作边学习 Git 基本功能,目前仅提供英文版。
- 链接:tryGit
小结
本章讲解了 Git 分支的基本操作与协作流程,包括获取远程分支、提交更改、推送分支以及更新本地分支。掌握这些操作足以应对日常开发中的大部分需求。对于更高级的操作,建议查阅本章推荐的参考资料。

6148



被折叠的 条评论
为什么被折叠?



