/ 笔记  

Git学习笔记(更新中~)

前言

作为一个“伪”程序员,当然有在使用GitHub,也有一个一直在维护的项目,但是苦于对Git的了解不够深入,每次项目更新我的浏览器就会产生大量造轮子般的搜索记录,如下图这样:

造的轮子

而且之前打CTF比赛也碰到过Git相关的题目,着实是查了好一阵子文档才得出结果,所以前两天就下定决心好好从头到尾学习一下Git,这才有了这篇水文。

什么是Git

Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。

Git是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

以上是摘自百度百科的关于Git的定义。

简单来讲:Git就是一个目前世界上最先进的分布式版本控制系统。不理解也没关系,你只需要知道,像微软谷歌苹果这样的巨头也在使用Git管理他们的开源代码。

在我看来,Git就是极客精神的完美体现,至少它的诞生就带着那么一丝传奇色彩——它的创造者 Linus 由于不满 BitMover 公司撤销授权的威胁,花了两周时间写出了Git,并在一个月之内开始使用Git管理Linux的代码。多么传奇的故事,现在读来仍然能让人热血沸腾一把。

Git的基本操作

命令 操作
git init 创建版本库
git add filename 添加文件到项目
git rm filename 从项目中删除文件
git commit -m “描述” 把文件提交到仓库
git status 查看仓库当前状态
git diff 查看文件修改内容
git log 查看历史记录
git reflog 查看版本库更改历史
git reset –hard commit_id 回到某个指定版本
git checkout – filename 清空工作区的所有内容

管理远程项目

1、将本地仓库推送到GitHub

首先在GitHub新建一个名为 learnGit 的仓库

然后配置本地电脑的Git,具体操作我的这篇文章:配置Git

然后在本地执行命令以下命令:

git remote add origin git@github.com:reputati0n/learnGit.git

reputati0n为Github用户名,learnGit.git为仓库名,这条命令的作用是将本地仓库和远程仓库建立连接。

使用以下命令将本地仓库推送至远程仓库:

git push -u origin master

-u参数用于第一次推送,以后可省略。

2、管理、更新远程仓库

先把远程仓库clone到本地:

git clone git@github.com:reputati0n/learnGit.git

初始化本地仓库:

git init

将本地仓库与远程仓库建立连接:

git remote add origin git@github.com:reputati0n/learnGit.git

然后在本地完成更新、维护操作之后,推送到远程仓库:

git push origin master

推送过程可能会需要GitHub的用户名密码。

分支的合理利用及管理

分支是一个很奇妙的概念,在实际开发环境经常用到分支。比如在协同工作时,负责开发不同功能的程序员可以创建不同的分支,又或者在进行新功能开发时可以创建dev分支同时又不影响当前功能。

基本操作

操作 命令
查看分支 git branch
创建分支 git branch name
创建并切换到新分支 git checkout -b name
切换分支 git checkout name/git switch name
合并某分支到当前分支 git merge name
删除分支 git branch -d name

冲突解决

当我们在不同的分支进行了不同操作的时候,就会出现冲突,当我们试图合并分支时,git就会做出提醒,并试图合并修改操作,我们可以使用 git status 来查看存在冲突的文件,如下图

查看存在冲突的文件会发现,git已经将存在冲突的部分使用<<<<<<<,=======,>>>>>>>标记了出来

修改存在冲突的文件,重新提交即可。

使用 git log –graph 命令可以看到分支合并图。

实际使用场景——BUG修复

正在进行新功能的开发时,收到修复BUG的任务,首先需要暂时搁置手上的进度,此时可以使用 stash 功能。

操作 命令
存储当前进度 git stash
查看被挂起的内容 git stash list
恢复被挂起的内容但不删除挂起内容 git stash apply
恢复被挂起的内容同时删除挂起内容 git stash pop
删除挂起内容 git stash drop
恢复指定stash git stash apply stash@{0}

在当前进度被保存之后,我们可以安心的去修改BUG了,很显然我们可以创建一个 issue 分支来进行修复工作。修复完成后合并分支提交即可。

但是这里有一个新的问题,倘若我们同时有master和dev两个分支,那么大概率这两个分支同时存在这个BUG,我们如果在master分支修复了这个BUG,dev分支其实是仍然存在BUG的,难道要在dev分支再进行一次修复操作么?不不不,我们可以直接将master分支的修复操作复制到dev的分支。

切换到dev分支,使用 git cherry-pick 627f658 命令复制特定的提交到当前分支。至于 627f658 ,我们可以通过使用 git reflog 命令查看。

小结