Git - 想说爱你不容易

1、玩转Github

想学git,我们首先要有一个Github账号,关于Github是什么,以及怎么注册及使用,git的诞生请看这篇文章

最近关于Github微软又增加了一个打赏的功能,感兴趣的可以看一看。

如果你想开通这个打赏的功能,可以通过这个链接,点击“join the waitlist”,然后填一张表等待审核就行了,之后就可以设置金额、结算日期、收费账户等信息了。

github上的热门项目网址https://github.com/trending

2、Git下载及配置

我们第一次用git或者是新电脑上重新安装git工具的时候,都需要重新配置一些这个工具。git工具官网下载速度慢,且有可能安装不成功,附快速下载地址(国内下载站):git工具下载地址 。下载完之后,Windows中你在桌面上或者文件管理器中鼠标右键就可以看见Git Bash here,就是用来打开git bash的。linux在终端中,输入sudo apt-get install git 就可以安装了。安装完之后linux直接在终端中就可以直接使用下面git讲的命令了。下载完可以用命令git --version打印当前的git版本验证是否成功。下面正式开始Git的配置。

​ 接下来就是不管我们是第一次使用git工具,还是后来换电脑了,还是换成linux系统了,要想使用git都按照下面的方法配置一遍,才可以使用。

​ 安装成功之后,在命令行中敲下如下命令 git config --list,显示当前的配置信息。

​ 接下来设置提交仓库时的用户名信息 git config --global user.name "孟超"

​ 设置提交仓库是的邮箱信息 git config --global user.email "2205101365@qq.com"

git设置关闭自动换行git config --global core.autocrlf false ,为了保证文件的换行符是以安全的方法,避免windows与unix的换行符混用的情况,最好也加上这么一句
git config --global core.safecrlf true

其实这些信息都在一个配置文件中,就在当前用户的主目录下边的.gitconfig文件中,也可以直接打开这个文件cd ~,vim .gitconfig进行编辑。

​ git有四种协议:Git协议,http协议,本地协议,ssh协议。大部分都是用ssh协议。这个不仅速度快,而且不用每次提交输入密码,可谓是省心省力。下面就说一下。(这个协议配置的过程不可缺少,不然就用不了这种协议。)

​ 首先生成 RSA 密钥对

ssh-keygen -t rsa -C "your email"注意格式,一定要正确。 ssh和-keygen无空格

此时在用户主目录下就会有一个.ssh隐藏文件,进入该目录有一个id_rsa.pub文件,cat命令查看这个文件,复制下来然后在 github网站添加公钥 ,方法如下

在 Github 网站添加公钥:在右上角头像处点settings进入设置,然后点SSH and GPG keys,进入之后点击New SSH key 粘贴进去,随便给这个秘钥命个名,方便管理就行了。钥匙显示黑色即可。

​ 此时配置就完成了。接下来就可以使用git了。

3、往github仓库中推送的流程

因为这一套流程是比较经常用的,平时基本只会用到这个标题下的命令。所以我把它单独拿了出来。首先我们需要明确几个概念。

远程仓库:就是github网站上的我们看见的那个仓库。

工作区  :就是我们在本地资源管理器中平时用的那些真正的文件。

暂存区:英文名叫stage或者index,一般存在.git目录下边的index下,工作区发生改变需要add到暂存区才行。

版本库:工作区有一个隐藏的目录叫.git,这不算工作区,这是我们的版本库.

第一步

①在GitHub网站上,先建立一个仓库,比如命名为demo,这个demo仓库的路径全名称就是https://github.com/mengchaobbbigrui/demo,中间就是用户名。

第二步

②然后在git工具中克隆到本地仓库,命令如下git clone https://github.com/mengchaobbbigrui/demo就可以克隆到了本地仓库。

第三步

③然后输入cd demo进入该本地仓库,git工具中会自动在目录后面跟着一个(master),这就代表这是一个本地 仓库了。

第四步

④接着我们可以在工作区中做任何修改文件啊,提交代码啊各种操作,这时候工作区文件就发生了改变,要想推送到远程仓库上,我们需要一点一点实现。我们需要把更改的文件或者内容添加到暂存区,我们可以使用命令git add .(注意这个后面的点.,这个命令代表把所有的更改都添加到暂存区去,当然如果目前只想添加其中一个更改的文件a,只需要使用命令git add a即可)

第五步

⑤在暂存区中我们需要往版本库中提交,(提交这么多次,主要是为了方便更改和控制吧,以及快速回撤到之前的一个版本)提交的命令是git commit -m "提交信息"(在提交信息处填写提交的信息,描述修改了什么,添加了什么功能之类的)

第六步

⑥接下来我们就要往远程仓库推送了,推送的命令是git push(有时候会让你输入用户名和密码照着做就是了)

提交成功,我们就可以去github自己的主页上看到自己刚刚提交上去的东西了。

到这里推送到远程仓库就已经做完了。这里有个简洁 的命令,可以把四五步合并,前提是远程仓库中已经有这个文件了,命令是git commit -a -m "提交信息"一步完成,不必四五两步了。

其实仓库还有另外一种方法,但是我一般不用,就是先在本地建立一个文件夹,然后用git init命令初始化为一个仓库,,然后再去github网站建立远程仓库,然后通过这个命令建立远程连接,git remote add [shortname] [url] 。url就是仓库的完整网址,shortname是你给远程仓库起的名字。如果此时远程仓库和本地仓库内容有不同,请首先执行git pull [shortname] master 。然后本地的操作和上面的一样,提交命令不同是git pull [shortname] master master是分支,默认就这一个分支。

4、Git中的常用命令

①git pull

​ 当我们的github网站上对某个文件进行了改动的话,此时本地的工作区就与远程的仓库内容不一致了,我们可以把远程仓库拉下来,这样之后,我们就可以使本地与远程仓库一致了。命令是这个,git pull这个命令就是将远程仓库拉下来,并与本地合并

②当本地和远程仓库同时改变时

git stash(把本地的修改全部缓存起来)然后再git pullgit stash pop`(把缓存起来的修改恢复)
然后如果有冲突解决冲突,没有就
`git push

③显示变更信息git status

可以看出来文件是否提交到了暂存区,是否提交到了版本库

④查看当前分支的历史版本git log

可以查看当前分支的历史版本,和哈希值(一串特殊的字符串)

可以在git log后面加数字表示显示多少个,比如显示3个命令是git log -3

⑤git show HEAD

查看最近一次命令提交的完整信息,包括文件中的增添和删除都会显示出来,如果想要看之前提交的东西,可以用

git log打印出之前的哈希值,然后用命令 git show 哈希值来查看

⑥别名

git  config  – -global  alias.ci commit这就是将commit设置成ci了

⑦git diff

这个命令是用来比较两次更改之间的差异的(命令后面都可以加文件名实现只看这个文件的前后变化)

git diff 不加参数即默认比较工作区与暂存区

git diff --readme.md

git diff --cached 比较暂存区与最新本地版本库

git diff HEAD  比较工作区与最新本地版本库

⑧git commit详细用法

在之前我们说往版本库中提交时要用git commit -m "提交信息"这样做,但是标准的写法是下面这样的

我们直接输入命令git commit然后出来一个用vim打开的东东,我们在这里编辑即可代表我们提交的东西,编辑的格式是这样的:

<type>(<scope>):<subject>
//空一行
<body>
//空一行
<footer>

其中type类型是这次更改的东西是什么,type应该是下面这几个单词:

feat:新功能
fix :修补bug
docs:文档
style:格式
refactor:重构(也就是既不是新增功能也不是修改bug的代码变动)
test:增加测试
chore:构建过程中或辅助工具的变动

scope应该是变动的文件范围,subject是说明

body就是详细说明

footer一般不写

⑨git blame(真正操作的时候文件旁边没有那两个尖括号,直接就是文件名)

逐行查看文件修改的历史

git blame  <file name>

从第 100 行开始,到 110 行。逐行查看文件的修改历史

git blame –L 100,110 <file name>

5、Git中的其他操作

①.gitignore

使用场合:  

1.忽略操作系统自动生成的文件,比如:缩略图,等; 

2.忽略编译生成的中间文件、可执行文件等,比如: C 语言编译产生的 .obj 文件和 .exe 文件;  

3.忽略你自己的带有敏感信息的配置文件,比如:存放口令的配置文件;  

4.tmp/ 临时目录;  

5.log/ 日志目录;  

等等。 

**包含在.gitignore中的东西将不会提交到github远程仓库中** 

在建立远程仓库中,最下面有一个初始化的文件中就有一个是否配置.gitignore的文件 

②ssh协议、http协议

ssh协议中克隆远程仓库,一般写成简短的命令  

git clone ssh://git@github.com/mengchaobbbigrui/demo.git

git clone git@github.com:mengchaobbbigrui/demo.git 

添加远程仓库的链接

git remote add origin git@github.com:mengchaobbbigrui/demo.git

以上就是ssh协议 

在http协议中克隆命令是:

git clone https://mengchaobbbigrui.github.com/demo

③标签操作

就是给提交的某一个重要节点(比如软件开发过程中的一个重要版本号)打上一个标签,以后也可以不用哈希值, 可以直接用标签。常用命令有

列出现有标签的命令非常简单,直接运行 git tag即可

默认标签是打在最新提交上的。命令敲git tag <name>就可以打一个新标签

如果忘记给某一次历史记录打标签了,找到他的commit_id(也就是哈希值例如是f52c633)就可以了git tag v0.9 f52c633

删除标签v0.1.2 git tag -d v0.1.2

当推送到远程仓库时,默认情况下不包括标签。你需要明确地说你想将你的标签推送到你的远程仓库: git push origin --tag

(4)回撤操作

HEAD就是当前的指向,HEAD^是上一次指向,上两次指向就是HEAD~2

git add 后撤销:

撤销所有add文件 git reset HEAD .
撤销单个add文件 git reset HEAD -filename

git commit 后撤销:

只回退commit的信息,保留修改代码:git reset --soft HEAD
彻底回退到上次commit版本,不保留修改代码:git  reset --hard  HEAD^

撤销所有本地改动代码:

git checkout .

当本地回撤,并且远程仓库和本地不一致时,想要让远程的和本地一致,则使用强制推送到远程分支:

git push -f

(5)分支操作

这么说吧,一直说的master就是一个分支,只不过这是一个默认的分支,分支其实也很简单。分支的作用就在于

可以分支同步进行,最后进行合并,比如软件开发中,经常master主线并不会进行更改,而是进行发布稳定版本

的软件,在其他分支进行测试,多个分支,还可以是软禁进行分工同时进行。下面了解一下分支操作及其命令。

分支之间的操作互不影响,比如master修改了a文件,dev分支也修改a文件,他们两个互不影响,但是只有最终

合并的时候才会有影响,在提交啊各种操作都不影响。

①创建分支dev

git branch dev

②切换分支到dev

git checkout dev

③合并分支(必须先切换到要保留的分支)

git checkout master

git merge dev

④删除分支dev

git branch -d dev

⑤查看当前所有分支

git branch

6、冲突解决

要点(以下情况将会发生冲突):

1.在不同分支上,修改同一个文件;  

2.不同的人,修改了同一个文件;  

3.不同的仓库,修改了同一个文件;  

4.冲突只在合并分支的时候才会发生;   

 5.发生冲突并不可怕,冲突的代码不会丢失;  

6.解决冲突,重新提交,commit 时不要给 message;  

一般就是多个开发者对同一个文件做了修改,同行修改(出现冲突),不同行git 很智能的做了自动合并不需要人为修改,一个人改了push 上去,另一个人由于在同一个文件修改,所以就会出现 push 不上去,这样就需要人为解决(团队之间要商量)把那些有用的代码梳理好在提交,如果不商量很容易把别人的代码给丢弃了(不过git也可以通过日志找回只要开发者在本地提交了(commit)。。。。

解决方法:例如1,在未合并之前将不会发生任何冲突,但是就在合并的一刹那,执行合并的命令的时候,会报

错,显示冲突,git会提示哪个文件发生冲突,我们就直接去找那个文件,然后自行选择怎么修改,然后保存,重

新提交就行,提交时git commit打开的vim文件会自动有一句话默认就行了,冲突问题就解决了。

7、pull repuest

复制于廖雪峰老师的教程

如何参与一个开源项目呢?比如人气极高的bootstrap项目,这是一个非常强大的CSS框架,你可以访问它的项目

主页https://github.com/twbs/bootstrap,点“Fork”就在自己的账号下克隆了一个bootstrap仓库,然后,从自己

的账号下clone:git clone git@github.com:mengchaobbbigrui/bootstrap.git

一定要从自己的账号下clone仓库,这样你才能推送修改。如果从bootstrap的作者的仓库地址

git@github.com:twbs/bootstrap.git克隆,因为没有权限,你将不能推送修改。

Bootstrap的官方仓库twbs/bootstrap、你在GitHub上克隆的仓库my/bootstrap,以及你自己克隆到本地电脑的

仓库,他们的关系就像下图显示的那样:

┌─ GitHub ────────────────────────────────────┐
│                                             │
│ ┌─────────────────┐     ┌─────────────────┐ │
│ │ twbs/bootstrap  │────>│  my/bootstrap   │ │
│ └─────────────────┘     └─────────────────┘ │
│                                  ▲          │
└──────────────────────────────────┼──────────┘
                                   ▼
                          ┌─────────────────┐
                          │ local/bootstrap │
                          └─────────────────┘

如果你想修复bootstrap的一个bug,或者新增一个功能,立刻就可以开始干活,干完后,往自己的仓库推送。

如果你希望bootstrap的官方库能接受你的修改,你就可以在GitHub上发起一个pull request。当然,对方是否接受你的pull request就不一定了。

Last modification:July 8th, 2019 at 02:25 am
如果觉得我的文章对你有用,请随意赞赏

Leave a Comment