Git常用知识点整理

Posted 大忽悠爱忽悠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git常用知识点整理相关的知识,希望对你有一定的参考价值。

Git学习


Git 工作机制


Git 和代码托管中心


Git 安装

去git官网下载即可


选择 Git 安装位置,要求是非中文并且没有空格的目录,然后下一步。


Git 选项配置,推荐默认设置,然后下一步。



默认分支名设置,选择让 Git 决定,分支名默认为 master,下一步。


修改 Git 的环境变量,选第一个,不修改环境变量,只在 Git Bash 里使用 Git。


选择后台客户端连接协议,选默认值 OpenSSL,然后下一步

配置 Git 文件的行末换行符,Windows 使用 CRLF,Linux 使用 LF,选择第一个自动转换,然后继续下一步


选择 Git 终端类型,选择默认的 Git Bash 终端,然后继续下一步。


选择 Git pull 合并的模式,选择默认,然后下一步。


选择 Git 的凭据管理器,选择默认的跨平台的凭据管理器,然后下一步。


其他配置,选择默认设置,然后下一步

实验室功能,技术还不成熟,有已知的 bug,不要勾选,然后点击右下角的 Install按钮,开始安装 Git


右键任意位置,在右键菜单里选择 Git Bash Here 即可打开 Git Bash 命令行终端。

在 Git Bash 终端里输入 git --version 查看 git 版本,如图所示,说明 Git 安装成功。


Git 常用命令


设置用户签名

1)基本语法

git config --global user.name 用户名
git config --global user.email 邮箱


说明:

签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git 首次安装必须设置一下用户签名,否则无法提交代码。

※注意:这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任何关系


初始化本地库

基本语法

git init

首先,我在D盘下面创建一个目录作为我的本地库

当前目录下,鼠标右键点击,启动Git Bash,路径就是在当前目录下

输入git init 命令,初始化本地库


生成的.git文件,默认是隐藏的,需要勾选才能显示

-a:显示隐藏文件,命令和linux通用的


查看本地库状态

基本语法:

git status

首次查看(工作区没有任何文件)

新增文件(hello.txt)

vim里面—yy是复制,p是粘贴



cat指令

cat 查看文件内容,是以只读的方式打开。

cat -n 文件名 : 查看文件并显示行号


tail 指令

tail 用于输出文件中尾部的内容,默认情况下 tail 指令显示文件的后 10 行内容。

tail -n 5 文件 (查看文件后5行内容)


再次查看(检测到未追踪的文件)


添加暂存区

将工作区的文件添加到暂存区

基本语法

git add 文件名


警告是说把文件中的LF换行符都替换为了CRLF换行符,我们不需要管


查看状态(检测到暂存区有新文件)


目前是保存在暂存区中,可以进行删除操作


删除暂存区中的文件

删除暂存区中的文件,而不是工作区

这里的git_demo可以就是工作区


当我们删除暂存区的文件后,这里再查看本地库状态,会检测到未追踪的文件


提交本地库

将暂存区的文件提交到本地库

1)基本语法

git commit -m "日志信息" 文件名

这里的b688cdb是提交生成的版本号


查看状态(没有文件需要提交)

提交本地库后,再次查看本地库的状态


查看引用日志信息

git reflog


最开始显示的是版本号

最后显示的是日志信息


查看详细的日志信息

git log


commit后面显示的是完整的版本号,git reflog显示的是完整版本号的前面七位

可以看到是谁提交了这个版本


修改文件(hello.txt)

查看状态(检测到工作区有文件被修改)

将修改的文件再次添加暂存区


查看状态(工作区的修改添加到了暂存区)


提交到本地仓库


git里面按照行来维护文件,修改一行的操作本质是先删除修改前的一行,再把修改后的一行新增进来


提交到本地库后,再次查看状态


查看版本信息


此时已经有两个版本了

注意: 此时指针指向第二个版本,我们可以直接查看第二个版本的相关内容


查看详细版本信息


注意指针的指向(HEAD–>master)指向哪一个版本,默认指向最新版本


历史版本

查看历史版本

1)基本语法

git reflog 查看版本信息

git log 查看版本详细信息


版本穿梭 --切换当前指针指向的版本

1)基本语法

git reset --hard 版本号


rest : moving to b868cdb :表示指针移动到了该版本号

Git 切换版本,底层其实是移动的 HEAD 指针,具体原理如下图所示。




Git 分支操作


什么是分支

在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独
分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时
候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是
一个单独的副本。(分支底层其实也是指针的引用)


分支的好处

同时并行推进多个功能开发,提高开发效率。

各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。


分支的操作


查看分支

1)基本语法

git branch -v


创建分支

1)基本语法

git branch 分支名


切换分支

1)基本语法

git checkout 分支名



修改分支—在当前分支下对文件进行修改操作


修改完文件后,添加到缓存区

再提交到本地仓库

这里可以看出master分支下面有三个版本,而hot-fix分支下面有我们最新上交的版本


再次回到master分支


此时,查看hello.txt文件并没有被修改,因为一个分支上的操作不会影响另一个分支

一个分支上的操作,不会影响另一个分支,因为每个分支管理各自旗下的版本


合并分支

1)基本语法

git merge 分支名


分支合并完之后,再次查看当前文件


因为切换到master分支后,没有对文件进行修改操作,而hot-fix分支对文件进行了修改操作,所有合并后,显示的是修改后的文件内容

合并分支,修改的是当前分支下面的文件,要合并的那个分支不会受到影响


产生冲突–在两个分支上都对同一个文件进行修改并且还都进行了提交

冲突产生的表现:后面状态为 MERGING

首先切换到hot-fix分支,对文件进行修改,然后添加到缓存区,提交到本地仓库


切换到master分支,对文件进行修改,然后同样添加缓存区,提交本地仓库

此时再master分支下,进行分支合并操作:


此时发生冲突,因为两个分支都对文件进行了修改并提交,合并的时候,不知道该用哪一个修改后的版本


解决冲突

1)编辑有冲突的文件,删除特殊符号,决定要使用的内容

特殊符号:<<<<<<< HEAD 当前分支的代码 ======= 合并过来的代码 >>>>>>> hot-fix

下面我们需要手动决定新代码内容


新代码内容:

2)添加到暂存区

3)执行提交(注意:此时使用 git commit 命令时不能带文件名)

把人为修改的文件添加到缓存区,提交到本地库


当人为修改完,提交本地仓库时,不能携带文件名,否则会报错

因为两个分支都修改了这个文件,如果此时带上文件名,会不知道该提交哪一个hello.txt

–发现后面 MERGING 消失,变为正常


创建分支和切换分支图解

切换分支,就是切换head指针的指向

master、hot-fix 其实都是指向具体版本记录的指针。当前所在的分支,其实是由 HEAD决定的。所以创建分支的本质就是多创建一个指针。

HEAD 如果指向 master,那么我们现在就在 master 分支上。

HEAD 如果执行 hotfix,那么我们现在就在 hotfix 分支上。


Git团队协作机制

团队内协作

跨团队协作


GitHub 操作

GitHub 网址https://github.com/

创建远程仓库


远程仓库操作


点击创建以后,会处理当前远程仓库连接的地址

这里有两种连接地址,一种是Https,一种是SSH


远程仓库操作



这里创建一个别名,结果显示的一个是推送别名,一个是拉取别名


推送本地分支到远程仓库

1)基本语法

git push 别名 分支

这里github的服务器在国外,所有对网络的要求比较高

这里连接成功,会弹出一个登陆github的窗口,登陆成功后,就会在bash页面显示推送成功


将远程库的代码拉取到本地库

基本语法:

git pull 别名 分支


这里如果成功,会自动把代码拉取到本地仓库


克隆远程仓库到本地(拉取到本地)

1)基本语法

git clone 远程地址

$ git clone https://github.com/atguiguyueyue/git-shTest.git

结果:

Cloning into 'git-shTest'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.

这个地址为远程仓库地址,克隆结果:初始化本地仓库

$ git remote -v
origin https://github.com/atguiguyueyue/git-shTest.git (fetch)
origin https://github.com/atguiguyueyue/git-shTest.git (push)

小结:clone 会做如下操作。1、拉取代码。2、初始化本地仓库。3、创建别名,默认叫origin


邀请加入团队

1)选择邀请合作者

2)填入想要合作的人

3 ) 复 制 地 址 并 通 过 微 信 钉 钉 等 方 式 发 送 给 该 用 户 , 复 制 内 容 如 下 :

https://github.com/atguiguyueyue/git-shTest/invitations

4)在 atguigulinghuchong 这个账号中的地址栏复制收到邀请的链接,点击接受邀请

5)成功之后可以在 atguigulinghuchong 这个账号上看到 git-Test 的远程仓库

6)令狐冲可以修改内容并 push 到远程仓库。

--编辑 clone 下来的文件
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/pro-linghuchong/git-shTest
(master)
$ vim hello.txt
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/pro-linghuchong/git-shTest
(master)
$ cat hello.txt
hello git! hello atguigu! 2222222222222
hello git! hello atguigu! 33333333333333
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu! 我是最帅的,比岳不群还帅
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu!
hello git! hello atguigu! master test
hello git! hello atguigu! hot-fix test
--将编辑好的文件添加到暂存区
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/pro-linghuchong/git-shTest
(master)
$ git add hello.txt
--将暂存区的文件上传到本地库
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/pro-linghuchong/git-shTest
(master)
$ git commit -m "lhc commit" hello.txt
[master 5dabe6b] lhc commit
1 file changed, 1 insertion(+), 1 deletion(-)
--将本地库的内容 push 到远程仓库
Layne@LAPTOP-Layne MINGW64 /d/Git-Space/pro-linghuchong/git-shTest
(master)
$ git push origin master
Logon failed, use ctrl+c to cancel basic credential prompt.
Username for 'https://github.com': atguigulinghuchong
Counting objects: 3, done.
Delta compression using up to 12 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 309 bytes | 309.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/atguiguyueyue/git-shTest.git
 7cb4d02..5dabe6b master -> master

7)回到 atguiguyueyue 的 GitHub 远程仓库中可以看到,最后一次是 lhc 提交的



跨团队协作

1)将远程仓库的地址复制发给邀请跨团队协作的人,比如东方不败

2)在东方不败的 GitHub 账号里的地址栏复制收到的链接,然后点击 Fork 将项目叉到自己的本地仓库


叉入中…

叉成功后可以看到当前仓库信息。

3)东方不败就可以在线编辑叉取过来的文件。

4)编辑完毕后,填写描述信息并点击左下角绿色按钮提交。

5)接下来点击上方的 Pull 请求,并创建一个新的请求



6)回到岳岳 GitHub 账号可以看到有一个 Pull request 请求

进入到聊天室,可以讨论代码相关内容

7)如果代码没有问题,可以点击 Merge pull reque 合并代码。


SSH 免密登录

我们可以看到远程仓库中还有一个 SSH 的地址,因此我们也可以使用 SSH 进行访问

具体操作步骤如下

1.进入当前用户的家目录

2.删除.ssh目录

3.运行命令生成.ssh 秘钥目录[注意:这里-C 这个参数是大写的 C]

4.进入.ssh 目录查看文件列表

5.查看 id_rsa.pub 文件内容–公钥

以上是关于Git常用知识点整理的主要内容,如果未能解决你的问题,请参考以下文章

常用python日期日志获取内容循环的代码片段

整理下git常用命令

C#常用代码片段备忘

git 常用命令 整理

最全最详细publiccms常用的代码片段

Git 常用命令整理