文章目录
- 下面的一到三都是本地操作哦
- 下面的四到五是从首次到再次开发的过程哦
- 一、基本操作
- 1.git init——初始化仓库,目的:得到本地的工作树和仓库
- 2.git status——查看仓库的状态:检查是否git add了
- 3.git add——向暂存区(叫Stage或者Index)中添加文件
- 注:没有git add的话,用git status查看,就会出现untracked files
- 注:在git add之前,用git diff head查看本次提交与之前提交的差别(head是最新提交的意思)
- 4.git commit——保存仓库的历史记录
- 注:git commit命令可以将当前暂存区中的文件实际保存到仓库的历史记录中。
- (1)git commit -m “xxxx”操作
- (2)直接输入git commit
- (3)中止提交
- (4)查看提交后的状态
- 5.git log——查看提交日志
- 注:查看的永远是git commit 或者git commit -m的内容
- (1)直接git log
- (3)git log README.md 只显示指定目录、文件的日志
- (4)git log -p README.md 显示文件的改动
- 6.git diff——查看更改前后的差别
- 二、分支操作
- 1.git branch——显示分支一览表
- 2.git checkout -b——创建、切换分支
- 2.特性分支
- 3.主干分支
- 4.git merge——合并分支
- 5.git log --graph——以图表形式查看分支
- 三、更改提交的操作
- 1.git reset——回溯历史版本
- 2.消除冲突:README.md文件发生冲突,该咋办
- 3.修改提交信息
- 4.修正拼写错误,然后压缩历史
- 四、推送至远程仓库github——首次建立
- 五、从远程仓库获取——再次开发
下面的一到三都是本地操作哦
下面的四到五是从首次到再次开发的过程哦
一、基本操作
1.git init——初始化仓库,目的:得到本地的工作树和仓库
(1)mkdir和git init初始化仓库
(2)工作树就是.git文件夹,仓库就是mkdir的文件夹
2.git status——查看仓库的状态:检查是否git add了
(a)git status的说明
(b)eg:
3.git add——向暂存区(叫Stage或者Index)中添加文件
注:没有git add的话,用git status查看,就会出现untracked files
注:在git add之前,用git diff head查看本次提交与之前提交的差别(head是最新提交的意思)
4.git commit——保存仓库的历史记录
注:git commit命令可以将当前暂存区中的文件实际保存到仓库的历史记录中。
(1)git commit -m “xxxx”操作
(2)直接输入git commit
(3)中止提交
如果在编辑器启动后想中止提交,请将提交信息留空并直接关闭编辑器,随后提交就会被中止。
(4)查看提交后的状态
5.git log——查看提交日志
注:查看的永远是git commit 或者git commit -m的内容
(1)直接git log
git log命令可以查看以往仓库中提交的日志。包括可以查看什么人在什么时候进行了提交或合并,以及操作前后有怎样的差别。
说明:
(a) commit 栏旁边显示的“9f129b……”是指向这个提交的哈希值。 Git 的其他命令中,在指向提交时会用到这个哈希值。
(b)Author 栏中显示我们给 Git 设置的用户名和邮箱地址。 Date 栏中显示提交执行的日期和时间。再往下就是该提交的提交信息。
(2)git log --pretty=short 只显示提交信息的第一行
(3)git log README.md 只显示指定目录、文件的日志
(4)git log -p README.md 显示文件的改动
6.git diff——查看更改前后的差别
注:查看工作树、暂存区、最新提交之间的差别。
(1)前提:在README.md文件中写 # Git教程
(2)查看工作树和暂存区的差别
(3)git diff head查看工作树和最新提交的差别
注:在执行git commit之前可以用git diff HEAD命令查看本次提交与上次提交有什么差别,确认完毕后再提交
二、分支操作
(1)分支的解释
(2)分支可以同时高效地进行并行开发
1.git branch——显示分支一览表
2.git checkout -b——创建、切换分支
(1)切换到 feature-A 分支并进行提交(add 和commit操作)
(a)创建名为 feature-A 的分支。
(b)
(c)一定按照下面的步骤来,才会不影响master分支的README.md文件
注:上面所谓的 “才会有下面的结果”:指的是:在master分支查看,在feature-A分支里编辑的README.md,发现并未改变master分支的README.md文件的内容
(2)git checkout master切换到 master 分支
2.特性分支
(1)特性分支的定义
特性分支顾名思义,是集中实现单一特性(主题),除此之外不进行任何作业的分支。
在日常开发中,往往会创建数个特性分支,同时在此之外再保留一个随时可以发布软件的稳定分支。
稳定分支的角色通常由 master 分支担当。
(2)特性分支的好处
3.主干分支
4.git merge——合并分支
(1)首先切换到 master 分支
(2)然后合并 feature-A 分支。
为了在历史记录中明确记录下本次分支合并,我们需要创建合并提交。因此,在合并时加上 --no-ff参数。
5.git log --graph——以图表形式查看分支
三、更改提交的操作
1.git reset——回溯历史版本
(1)Git 的另一特征便是可以灵活操作历史版本。借助分散仓库的优势,可以在不影响其他仓库的前提下对历史版本进行操作。
(2)要让仓库的 HEAD、暂存区、当前工作树回溯到指定状态,需要用到 git rest --hard命令。只要提供目标时间点的哈希值 A,就可以完全恢复至该时间点的状态。
(3)首先要确定回溯的目标是:feature-A
(3)创建 fix-B 分支:从git check -b ->git commit 一套操作
(a)操作流程如下
(b)得到的当前状态如下:
(4)推进至 feature-A 分支合并后的状态
(a)首先恢复到 feature-A 分支合并后的状态。不妨称这一操作为“推进历史”。
(b)用git reflog命令在日志中找出回溯历史之前的哈希值
(c)用git reset --hard命令恢复到回溯历史前的状态
(d)操作如下:
说明:
(i)只要不进行 Git 的 GC(Garbage Collection,垃圾回收),就可以通过日志随意调取近期的历史状态;
(ii)即便开发者错误执行了 Git 操作,基本也都可以利用 git reflog命令恢复到原先的状态,所以请各位读者务必牢记本部分。
(iii)从上面数第四行表示 feature-A 特性分支合并后的状态,对应哈希值为 83b0b94A。利用git rest --hard命令,可将 HEAD、暂存区、工作树恢复到这个时间点的状态。
(e)恢复历史后的状态如下:
2.消除冲突:README.md文件发生冲突,该咋办
(1)现在只要合并 fix-B 分支,就可以得到我们想要的状态。
(2)用Vim编辑器打开README.md文件并解决冲突
(3)解决完毕后,需要git add 和git commit提交
3.修改提交信息
(1)修改上一条提交commit信息:用 git commit --amend命令。
(2)执行 git log --graph命令查看提交日志中的相应内容
下面的结果我省略了。。。
4.修正拼写错误,然后压缩历史
(1)在合并特性分支之前,如果发现已提交的内容中有些许拼写错误等,不妨提交一个修改,然后将这个修改包含到前一个提交之中,压缩成一个历史记录。
(2)创建 feature-C 分支
并用git add和git commit -m “Add feature C”进行提交
(3)修正拼写错误
请各位自行修正 README.md 文件的内容,修正后的差别如下所示。
说明:
错字漏字等失误称作 typo, 所以我们将提交信息记为 “Fix typo”
(4)使用压缩历史的原因是:
实际上,我们不希望在历史记录中看到这类提交,因为健全的历史记录并不需要它们。
如果能在最初提交之前就发现并修正这些错误,也就不会出现这类提交了。
(5)压缩历史:git rebase -i
(a)将 " Fix typo"修正的内容与之前一次的“Fix tyoe”提交合并,在历史记录中合并为一次完美的提交。
(b)当前分支的两个最新历史记录:git rebase -i HEAD~2
用上述方式执行 git rebase命令,可以选定当前分支中包含 HEAD(最新提交) 在内的两个最新历史记录为对象,并在编辑器中打开。
我们将 6fba227 的 Fix typo 的历史记录压缩到 7a34294 的 Add feature-C里。
->操作过程为:将 6fba227 左侧的 pick 部分删除,改写为 fixup。
最后用git log --graph查看,证明已经更改。
这样一来, Fix typo 就从历史中被抹去,也就相当于 Add feature-C中从来没有出现过拼写错误。这算是一种良性的历史改写。
(6)合并至 master 分支
四、推送至远程仓库github——首次建立
1.先在github上面新建一个仓库
(1)
(2)注意在github上面新建一个仓库为前提,clone到本地or推送至远程仓库,README.md文件的选择不同
(第三章第二大节内容)在github上面新建一个仓库,clone到本地时,需要github上选择要readme;
(当前的内容)在github上面新建一个仓库,推送至远程仓库,不需要github上选择要readme;
2.添加远程仓库:git remote add origin
(1)origin特指:github仓库
(2)
3.推送至远程仓库:git push
(1)推送至 master 分支
在master分支下操作,执行git push -u origin master
说明:
(a)像这样执行 git push命令,当前分支的内容就会被推送给远程仓库origin 的 master 分支。
(b) -u参数: 添加了这个参数,将来运行 git pull命令从远程仓库获取内容时,本地仓库的这个分支就可以直接从 origin 的 master 分支获取内容,省去了另外添加参数的麻烦。
(c)执行该操作后,当前本地仓库 master 分支的内容将会被推送到GitHub 的远程仓库中。在 GitHub 上也可以确认远程 master 分支的内容和本地 master 分支相同。
(2)推送至 master 以外的分支
(a)git checkout后直接git push
(b)内容的话,必须是git commit后,才可git push到github上
五、从远程仓库获取——再次开发
(1)本节中我们从实际开发者的角度出发,在另一个目录下新建一个本地仓库,学习从远程仓库获取内容的相关操作。这就相当于我们刚刚执行过 push 操作的目标仓库又有了另一名新开发者来共同开发。
1.获取远程仓库:git clone github仓库地址
(1)首先我们换到其他目录下,将 GitHub 上的仓库 clone 到本地。注意不要与之前操作的仓库在同一目录下
(2)显示本地仓库和远程仓库的分支信息:git branch -a
2.获取远程的 feature-D 分支
(1) 将 feature-D 分支获取至本地仓库:git checkout -b 本地仓库分支名 远程仓库分支名
(2)向本地的 feature-D 分支提交更改
(a)现在假定我们是另一名开发者,要做一个新的提交。在 README.md 文件中添加一行文字,查看更改
(b)利用git add 和git commit -m提交
(3)推送 feature-D 分支
(4)获取最新的远程仓库分支:git pull
(a)这时我们就可以使用 git pull 命令,将本地的 feature-D 分支更新到最新状态。 当前分支为 feature-D 分支。
(b)