这是一篇关于我个人学习 GitHub 的笔记,主要是记录一些我认为比较重要的知识点,以及一些我认为比较好的学习资料。
学习书籍:GitHub 入门与实践(图灵程序设计丛书)
这本书的目录是这样的
第 1 章到第 3 章的内容主要提了 Github 和 git、git 的配置、创建仓库等等。因为我本人平时有用过 Git 工具,以及 GitHub,我就简略看了,这里不赘述了。
4. 通过实际操作来学习 Git
4.1 基本命令
- git init
初始化仓库
>> mkdir Demo
>> cd Demo
>> git init
- git status 显示 Git 仓库的状态
这是一个十分常用的
命令
- git add——向暂存区中添加文件
>> git add README.md
>> git status # 查看一下状态
- git commit——保存仓库的历史记录
>> git commit -m "first commit"
- git log——查看提交日志
git log 命令可以查看以往仓库中提交的日志。包括可以查看什么人在什么时候进行了提交或合并,以及操作前后有怎样的差别
>> git log
>> git log --pretty=short #只显示提交信息的第一行
>> git log README.md #只显示指定目录、文件的日志
>> git log -p #显示文件的变动
>> git log -p README.md
- git diff——查看更改前后的差别
git diff 命令可以查看工作树、暂存区、最新提交之间的差别。
>> git diff HEAD 查看工作树和最新提交的差别
4.2 分支操作
在进行多个并行作业时,我们会用到分支。在这类并行开发的过程
中,往往同时存在多个最新代码状态。如图 4.1 所示,从 master 分支创
建 feature-A 分支和 fix-B 分支后,每个分支中都拥有自己的最新代码。
master 分支是 Git 默认创建的分支,因此基本上所有开发都是以这个分
支为中心进行的。
- git branch——显示分支一览表
git branch 命令可以将分支名列表显示,同时可以确认当前所在
分支。
>> git branch
* master # 表示当前分支
- git checkout -b——创建、切换分支
>> git checkout -b feature-A
上面命令等效于
>> git branch feature-A ## 创建分支
>> git checkout feature-A ## 切换分支
>> git branch ## 查看分支
* feature-A
master
来实际操作一下
1.在.gitnore文件中添加一行Hello
2.git add .gitnore
3.git commit -m "add .gitnore"
4.git checkout master 查看发现master分支没有收到影响
- git merge——合并分支
接下来,我们假设 feature-A 已经实现完毕,想要将它合并到主干分
支 master 中。首先切换到 master 分支。
然后合并 feature-A 分支。为了在历史记录中明确记录下本次分支合
并,我们需要创建合并提交。因此,在合并时加上 --no-ff参数。
>> git merge --no-ff feature-A
随后编辑器会启动,用于录入合并提交的信息。
默认信息中已经包含了是从 feature-A 分支合并过来的相关内容,所
以可不必做任何更改。将编辑器中显示的内容保存,关闭编辑器,然后就会看到下面的结果。
Merge made by the 'recursive' strategy.
README.md | 2 ++
1 file changed, 2 insertions(+)
这样一来,feature-A 分支的内容就合并到 master 分支中了。
- git log --graph——以图表形式查看分支
>> git log --graph
* commit 7ce2a1df16d795a87760e2748d0d7dae206adab0 (HEAD -> master)
|\ Merge: 446d54b 88bc87e
| | Author: 陆广兴 <[email protected]>
| | Date: Wed May 31 14:27:39 2023 +0800
| |
| | Merge branch 'feature-A'
| |
| * commit 88bc87efaf578047fa182dfcb408e2e7252af912 (feature-A)
|/ Author: 陆广兴 <[email protected]>
| Date: Wed May 31 14:09:03 2023 +0800
|
| Add to Feature-A
|
* commit 446d54bca9d80b48d3bf3eaadb244388c6edb3c3
| Author: 陆广兴 <[email protected]>
| Date: Wed May 31 13:21:06 2023 +0800
|
| 2
|
* commit 9946a43ae4a21af20ddfe50705bf91d6222b22f9
| Author: 陆广兴 <[email protected]>
| Date: Wed May 31 13:16:48 2023 +0800
|
| 1
|
* commit aa17b8adc6266b3f97440bb19d012fb064dbfacb
Author: 陆广兴 <[email protected]>
Date: Wed May 31 13:12:00 2023 +0800
初始化仓库
4.3 更改提交的操作
- git reset——回溯历史版本
我们先回溯到上一节 feature-A 分支创建之前,创建一个名为
fix-B 的特性分支。
要让仓库的 HEAD、暂存区、当前工作树回溯到指定状态,需要用
到 git rest --hard命令。只要提供目标时间点的哈希值 A,就可以完全恢复至该时间点的状态。事不宜迟,让我们执行下面的命令。
>> git log ## 查看feature-A之前的Hash
输出结果略
>> git reset --hard 446d54bca9d80b48d3bf3eaadb244388c6edb3c3
HEAD is now at 446d54b 2
创建 fix-B 分支
>> git checkout -b fix-B
Switched to a new branch 'fix-B'
在.gitignore文件中做点修改 最后一行添加”Hello,fix-b"
然后提交
>> git add ./.gitignore
>> git commit -m "Edit by fix-B"
[fix-B 3d07191] Edit by fix-B
1 file changed, 3 insertions(+)
现在的状态如图 4.5 所示。接下来我们的目标是图 4.6 中所示的状
态,即主干分支合并 feature-A 分支的修改后,又合并了 fix-B 的修改。
推进至 feature-A 分支合并后的状态
首先恢复到 feature-A 分支合并后的状态。不妨称这一操作为“推进
历史”。
git log命令只能查看以当前状态为终点的历史日志。所以这里
要使用 git reflog命令,查看当前仓库的操作日志。在日志中找出
回溯历史之前的哈希值,通过 git reset --hard命令恢复到回溯历
史前的状态
首先执行 git reflog 命令,查看当前仓库执行过的操作的日志。
>> git reflog
3d07191 (HEAD -> fix-B) HEAD@{0}: commit: Edit by fix-B
446d54b (master) HEAD@{1}: checkout: moving from master to fix-B
446d54b (master) HEAD@{2}: reset: moving to 446d54bca9d80b48d3bf3eaadb244388c6edb3c3
7ce2a1d HEAD@{3}: merge feature-A: Merge made by the 'ort' strategy.
446d54b (master) HEAD@{4}: checkout: moving from feature-a to master
88bc87e (feature-A) HEAD@{5}: checkout: moving from master to feature-a
446d54b (master) HEAD@{6}: checkout: moving from feature-A to master
88bc87e (feature-A) HEAD@{7}: commit: Add to Feature-A
446d54b (master) HEAD@{8}: checkout: moving from master to feature-A
446d54b (master) HEAD@{9}: commit: 2
9946a43 HEAD@{10}: commit: 1
aa17b8a HEAD@{11}: commit (initial): 初始化仓库
>> git checkout master ##先切换回到master分支
>> git reset --hard 7ce2a1d ##回到合并feature-A的节点
HEAD is now at 7ce2a1d Merge branch 'feature-A'
>> git log --graph
##此时应该可以看到.gitignone文件又回到了合并feature-A状态的样子,即最后一行有“### Edit on Feature-A”
>> git merge --no-ff fix-B ##合并fix-B
Auto-merging .gitignore
CONFLICT (content): Merge conflict in .gitignore
Automatic merge failed; fix conflicts and then commit the result.
从上面合并输出产生的信息可以看出,合并过程中产生冲突了
下面进行冲突消除
打开.gitignore文件可以发现,文件中变成了这样
<<<<<<< HEAD
- feature-A
=======
- fix-B
>>>>>>> fix-B
提交解决后的结果
>> git add ./.gitignore
>> git commit -m "Fix conflict"
[master f9951e5] Fix conflict
>> git log --graph ##以图形的方式查看分支历史
- git commit --amend——修改提交信息
我们将上一条提交信息记为了 "Fix conflict",但它其实是 fix-B 分
支的合并,解决合并时发生的冲突只是过程之一,这样标记实在不妥。
于是,我们要修改这条提交信息。
>> git commit --amend -m "Merge branch 'fix-B'"
>> git log --graph ##
|\ Merge: 7ce2a1d 3d07191
| | Author: 陆广兴 <[email protected]>
| | Date: Wed May 31 15:19:49 2023 +0800
| |
| | Merge branch 'fix-B'
| |
| * commit 3d07191a73a4e66fe16cbba1e51709ba216ce6f4 (fix-B)
| | Author: 陆广兴 <[email protected]>
经过修改过后可以看到提交的信息变成了 Merge branch 'fix-B'
- git rebase -i——压缩历史
在合并特性分支之前,如果发现已提交的内容中有些许拼写错误等,
不妨提交一个修改,然后将这个修改包含到前一个提交之中,压缩成一
个历史记录。这是个会经常用到的技巧,让我们来实际操作体会一下。
#创建 feature-C 分支
>> git checkout -b fix-C
作为 feature-C 的功能实现,我们在 README.md 文件中添加一行
文字,并且故意留下拼写错误,以便之后修正。
提交这部分内容。这个小小的变更就没必要先执行 git add命令
再执行 git commit命令了,我们用 git commit -am命令来一次
完成这两步操作。
>> git commit -am "Add fix-C"
[fix-C 801f93a] Add fix-C
1 file changed, 1 insertion(+), 1 deletion(-)
修正拼写错误
>> git commit -am "更正拼写"
| Author: 陆广兴 <[email protected]>
| Date: Wed May 31 15:48:44 2023 +0800
|
| 更正拼写
|
* commit 801f93a50af77c07d51bc5fd46783ee7ff617306
| Author: 陆广兴 <[email protected]>
| Date: Wed May 31 15:44:36 2023 +0800
|
| Add fix-C
|
>> git rebase -i HEAD~2
#用上述方式执行 git rebase命令,可以选定当前分支中包含
#HEAD(最新提交)在内的两个最新历史记录为对象,并在编辑器中
#打开。
按照下图所示,将 6fba227 左侧的 pick 部分删除,改写为 fixup。
pick 7a34294 Add feature-C
fixup 6fba227 Fix typo
合并分支到master
>> git checkout master
>> git merge --no-ff fix-C
>> git log --graph
4.4 推送到远程仓库
- 在GitHub上新建一个仓库,不需要勾选初始化仓库,避免生成README.md文件
- git remote add——添加远程仓库
>> git remote add origin git@github........
- git push——推送至远程仓库
>> git push -u origin master
##注意,这只会推送master分支,如果要推送其他分支,可以这样
>> git push -u origin branch-name
像这样执行 git push命令,当前分支的内容就会被推送给远程仓库
origin 的 master 分支。-u参数可以在推送的同时,将 origin 仓库的 master 分
支设置为本地仓库当前分支的 upstream(上游)。添加了这个参数,将来
运行 git pull命令从远程仓库获取内容时,本地仓库的这个分支就可
以直接从 origin 的 master 分支获取内容,省去了另外添加参数的麻烦。
4.5 从远程仓库获取
-
git clone——获取远程仓库
-
git branch -a
-
获取远程的 feature-D 分支
>> git checkout -b feature-D origin/feature-D
Branch feature-D set up to track remote branch feature-D from origin.
Switched to a new branch 'feature-D'
标签:git,入门,fix,图灵,feature,GitHub,master,commit,分支
From: https://www.cnblogs.com/EA7-King/p/17447075.html