git&github 速查指南

git使用指南

 
 
 
 
 
 
 
 

git常用命令小结


命令作用
git add 文件从working directory向stage提交
git commit -m “快照描述”从stage向repository提交,并形成快照
git status当前状态
git log简要日志
git reflog查看所有操作及对应的commitID
git reset --hard/[mixed]/soft HEAD~从repository向stage覆盖(hard—直接到work dir、mixed—到stage、soft—仅回滚repository)
git restore – 文件/ checkout – 文件从stage向working directory覆盖
git checkout HEAD 文件repository覆盖stage和working directory
git diff比较working directory和stage文件的区别
git diff --cached比较stage和repository文件的区别
git diff HEAD比较working directory和repository文件的区别
git branch 分支名创建分支
git checkout 分支名切换分支名
git merge 分支名a将分支a合并到当前分支中
git branch查看分支
git branch -va查看远程和本地所有分支
git remote add 远程名 远程仓库地址添加远程仓库的连接
git remote remove 远程名删除远程连接
git remote -v查看存在哪些远程连接

关于git reset的理解,git reset的功能是从repository覆盖回stage、{working directory} 覆盖回哪一级由 --mixed/–hard/–soft来控制。当使用HEAD时,没有波浪线 代表当前的版本快照。

 
 
 
 

git可参考的工作流程

1、创建"README.md"文件,提供描述性语言;
2、创建"LICNESE"文件,描述该项目是否开源,及开源程度;
3、创建相关项目文件;
4、添加git跟踪;

 
 
 
 

git的初始配置

1、cmd中输入以下内容,初始化用户

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

在这里插入图片描述

2、 cmd中输入以下内容,查看账户是否初始化成功

git config --list

出现以下内容(最下方有user.name和user.email)则成功。
在这里插入图片描述
 
 
 
 

git的理论基础

1、git的每个版本都存储着一份完整的代码镜像;

2、git的三棵树:工作区域(Working Directory)、暂存区域(Stage(index))、git仓库(Repository(HEAD));

3、git的一般工作流程:
1)、在工作目录中添加、修改文件;
2)、将需要进行版本管理的文件放入暂存区;
3)、将暂存区的文件提交到git仓库;

4、git文件管理的三种状态:
1)、已修改(modified);
2)、已暂存(staged);
3)、已提交(committed)

 
 

创建git仓库

1、进入要创建目录的文件夹;
2、输入以下命令创建git仓库:

git init

在这里插入图片描述

在这里插入图片描述

 
 
 
 

git工作流程的简单实例

 
 

在工作目录中添加、修改文件

在创建git仓库的位置创建"README.md"文件,里面填写该项目的描述性信息。
在这里插入图片描述

 
 

将需要进行版本管理的文件放入暂存区

通过以下命令将"README.md"文件添加到暂存区

git add "README.md"

区分大小写,名称错误会在后面报错
在这里插入图片描述

 
 

将暂存区的文件提交到git仓库

通过以下命令将文件提交到git仓库,注:每次使用git commit都会将暂存区的所有文件全部提交

git commit -m "add a readme file"

commit — 提交
-m — -m之后跟的是描述性的语句,用于简单描述此次改动

在这里插入图片描述

如果只输入

git commit

则会弹出一个cmd窗口以输入相关的描述,弹出窗口的编译器和安装时选择的文本编译器相同
在这里插入图片描述

 
 

将暂存区的文件清除出暂存区(git不跟踪)

1、当前有两个文件在git目录下新建,但是还没有使用 git add添加到暂存区中
在这里插入图片描述

2、现在将这两个文件添加到暂存区
在这里插入图片描述

3、将这两个文件清除出暂存区

清除暂存区中的文件(如果不写文件名则清除所有)

git reset HEAD	

在这里插入图片描述

原理:
1)、文件从工作区添加到了暂存区,但是还没添加到git仓库中。 所以现在 工作区和暂存区的文件是一样的, 但是和git仓库中的是不一样的。
2)、通过 git reset HEAD命令,将当前的 git 仓库中的数据覆盖回 暂存区,但是不覆盖回工作区。 这就使暂存区的文件版本与git仓库中一致,即回到了 git add 之前的状态

4、git中的新方法,仅可通过文件名来清除出暂存区

git restore --staged 文件

在这里插入图片描述

 
 
 
 

git克隆开源仓库的简单流程

git clone https://github.com/n0tr00t/Sreg

在这里插入图片描述

 
 
 
 

git查看当前工作状态

git status

在这里插入图片描述

 
 
 
 

git文件的更新及回退

当工作目录的文件(已经由git进行track)发生变化时,有两个选择。

在这里插入图片描述

一个是将更新后的文件从“工作目录”—添加到“暂存区域”—添加到“git仓库”:

git add 文件
git commit -m "描述"

另一个是从“暂存区”—将文件覆盖回“工作目录”,即不保存此次修改:

git checkout -- 文件

在这里插入图片描述
或者

git restore 文件

在这里插入图片描述

 
 
 
 

这里补充一个注意点 checkout 和 reset HEAD

在这里插入图片描述
1、用法区别:

git chechout -- 文件名
git reset HEAD

2、含义的区别:
git reset HEAD 是将文件从repository覆盖回stage
git checkout – 文件名 是将文件从stage覆盖回working directory

 
 
 
 

git历史提交目录查看

git log

在这里插入图片描述

 
 

git三棵树各自独立

当把文件提交到stage,但是尚未提交到repository,此时再修改工作working directory中的对应文件,则会出现以下情况 既有红色、又有绿色。红色说明working directory中的文件与repository中的不同,绿色说明stage中的文件尚未提交到repository。
在这里插入图片描述

此时若使用 git commit -m “xxx” 是将stage中的文件存放到repository中,而working directory中的文件与stage中的不同,即使提交了也不是最新的。

所以此时要先使用 git add 再使用 git commit 来保证三棵树的文件版本是相同的。此处有一个偷懒的做法就是使用

git commit -am "xxx"

此命令会先将working directory中的文件add到stage中,再将stage中的文件commit到repository中
在这里插入图片描述

 
 

git快照回滚

git中的三棵树是独立的,当输入git status时,出现红色说明working directory和stage中的是不一样的、出现绿色说明stage和repository是不一样的。

git的快照回滚指的是在repository中从最新的commit id回滚到前一个commit id,如下
在这里插入图片描述

当使用以下命令时,回滚到上一个快照。两个波浪线则为上两个快照,三个即为上三个快照。此处的波浪线是上波浪线,这里打不出来。

git reset HEAD~

在这里插入图片描述

回滚到倒数第四个快照,也可简写为

git reset HEAD~3

功能与下相同

git reset HEAD~~~

 
回滚一个快照之后发现当前repository中的当前版本(HEAD->master)指向了commit id为b8e3c1d0…的这个版本
在这里插入图片描述

此时输入git status查看状态
在这里插入图片描述
出现红字说明当前working directory中的版本和stage中的不一样了,即回滚的结果存放到了stage中去了。
此时三棵树的状态是:
working directory — 回滚前的快照,commit id 68f92…
stage — 回滚后的快照,commit id b8e3c1…
repository— 回滚后的快照,commit id b8e3c1…

 

git快照回滚(reset)的参数

git reset HEAD ~ 是 git reset --mixed HEAD~的简写版本,此命令实际执行了两步:
1、移动HEAD指向,并将其指向上一个快照(即回滚repository);
2、将HEAD移动后指向的快照,回滚到暂存区域(即回滚stage)。

另外两个更灵活的参数
git reset --soft HEAD~ 它仅仅执行第一个,即回滚repository

git reset --hard HEAD~ 它不仅会执行前两步,而且会同时将working directory中的内容同步回滚,即修改 repository、stage、working directory三棵树。

 

git通过commit id回滚快照

git reset commitId,commit id不需要全部输入,只输入前6个差不多就够了。如下当前有四个版本
在这里插入图片描述

使用commit id 回滚到 b8e3c1这个快照,此处要注意 --mixed和–soft --hard的选择
在这里插入图片描述

回滚结果如下
在这里插入图片描述

 

git仅回滚个别文件,不改变HEAD指针

 
 

git向前回滚(仅可通过id进行回滚)

git reset commitId

目前的HEAD指针在快照 b8e3c1这里
在这里插入图片描述

之前的快照如下
在这里插入图片描述

现在通过命令向前回滚到 354e02这个快照版本
在这里插入图片描述

回滚结果
在这里插入图片描述

 
 

git解决中文文件名乱码问题

在git bash中输入

git config --global core.quotepath false

在这里插入图片描述
在这里插入图片描述

 
 

git对比两个文件的差异

使用命令git diff比较stage区文件和working directory区文件的区别

git diff

在这里插入图片描述
如上图,
其中第三行 "index eba6606…4bc6df6 100644"中的eba6606和4bc6df6是两个文件commit id,100644中的100为linux中的文件类型编码,644为权限编码

第四行、第五行" — a/game.py"中的"—“代表stage区文件也就是旧文件。而第五行的”+++"则表示working directory中的新文件

蓝色字体后方表示内容比对开始,其中红色的是老版本(stage)中有的,而新版本(working directory)中没有的。绿色的表示新版本(working directory)中有的,老版本(stage)中没有的。

 

对比内容的显隐

注意:如果代码太长,不会将所有代码全部加载进来,而是在显示的结尾以 " : "独占一行,提示此处等待命令,此处可以输入的命令均为键盘按键(区分大小写):
j — 向下显示一行(向下扩展显示) 或者 方向键 ↑
k — 向上显示一行(向上收缩显示) 或者 方向键 下
f — 向下显示一页
b — 一页一页向上移
G — 移动到最后
g — 移动到最前
先输入数字3,再输入g则跳到第三行

在这里插入图片描述

 

对比内容的搜索

同样再上方的":"处输入以下字符开始查找
/ — 自上向下开始搜索
在这里插入图片描述
如,搜索print:

/print

? — 自下向上开始搜索
在这里插入图片描述
如,搜索print:

?print

此时按下:
n — 跳转到下一个被搜索的关键字
N — 跳转到上一个被搜索的关键字
h — 显示帮助信息
q — 退出

 

对比两个快照

git diff 快照id1 快照id2

 

对比working directory和repository

对比working directory和某个版本的快照

git diff 快照id

如果是和最新的快照对比则使用

git diff HEAD	

 

对比stage和repository

对比stage和某个版本的快照

git diff --cached 快照id

如果是和最新的快照对比则使用

git diff --cached

 
 

终极奥义图

在这里插入图片描述

 
 

git修改最后一次commit的内容

git修改最后一次commit的内容,即在不改变快照数量的情况下修改其中内容(其实质就是覆盖这个提交,会改变commit id)。
适用场景如:
1、最后一次的提交漏掉某个或者某几个文件;
2、最后一次提交的说明需要更改或完善等情况。

命令:

git commit --amend

实例:
1、现在有两个版本的快照,修改最新的7463b996这个的描述性内容。从"python without chinese char"改为"modify by git commit --amend"
在这里插入图片描述

2、输入git commit --amend后弹出vim框,如下
在这里插入图片描述

3、 现在修改最上面的描述内容
在这里插入图片描述

4、保存更改,依次按下
ESC —> shift + z —> shift + z
成功后回到cmd
在这里插入图片描述

5、修改结果如下:
在这里插入图片描述

 

git commit --amend进入后不修改退出

直接输入: “:q!” 即可退出
在这里插入图片描述

 

git commit --amend -m "xxxx"不进入修改说明

输入以下内容,以新的说明代替"xxxx"

git commit --amend -m "xxxx"

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

 
 

git恢复被删除的内容

输入以下命令执行

git checkout -- 文件名
或者
git restore 文件名

实例:
1、现在删除working directory中的README.md文件
在这里插入图片描述

2、输入命令
在这里插入图片描述
或者

在这里插入图片描述
3、文件均成功恢复
在这里插入图片描述

 
 

git删除文件

使用命令,此命令仅删除working directory和stage中的,不会修改快照

git rm 文件名

在这里插入图片描述

删除后提示,stage中内容与当前快照中的内容不符
在这里插入图片描述

 

git强制删除文件

适用于当git的working directory和stage中的文件不一致时

git rm -f 文件名

实例:
1、将README.md修改后git add,添加到stage中
2、在working directory中再次修改README.md
在这里插入图片描述
3、此时无法使用git rm 文件名的形式删除该文件
在这里插入图片描述
4、使用git rm -f 文件名删除
在这里插入图片描述

 

git仅删除stage中的文件

git rm --cached 文件名

 
 
 
 
 
 
 
 

git修改文件名


如果直接在working directory中修改文件名,git会识别为删除了旧的文件并且添加了新的文件,而不会认为是重命名。因此重命名操作需要在git中进行

git mv 旧文件名 新文件名

在这里插入图片描述

在这里插入图片描述

 
 
 
 
 
 
 
 

git的分支


常用于实际开发中有新功能需要添加时,在不改变主程序的情况下创建一个新的分支来进行相关功能的开发
在这里插入图片描述

 
 

git分支创建方法

git branch 分支名

在这里插入图片描述

 
 

git分支的查看方法

查看当前指向快照的所有引用(包括HEAD、分支、标签)

git log --decorate

以每个快照id独占一行的形式显示快照ID

git log --decorate --oneline

在这里插入图片描述
 

git分支切换方法

git checkout 分支名

在这里插入图片描述
在这里插入图片描述
 

git分支树的查看

git log --decorate --oneline --graph --all

在这里插入图片描述

 

git分支创建流程的图解

1、尚未创建分支时

在这里插入图片描述

2、使用 git branch创建分支后

在这里插入图片描述

3、切换分支后
在这里插入图片描述

4、在工作目录中新建一个文件"thisInFeatureBranch.txt",注意此时HEAD指向feature分支
在这里插入图片描述

在这里插入图片描述

5、提交一下改动,再切换回主分支,发现新创建的文件并不存在于主分支当中

1)、提交改动
在这里插入图片描述

2)、切换回主分支
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

 
 
 
 
 
 
 
 

git实例


 
 
 
 

git 忽略指定文件

创建 .gitignore 文件

打开git bash,并输入 touch .gitignore
在这里插入图片描述

 
 

在 .gitignore 文件中输入要忽略的文件

输入前
在这里插入图片描述
 
.gitignore 赋值后
在这里插入图片描述
在这里插入图片描述

 
 
 
 

重命名文件

 

复杂的方法:

例:将 foo.html 重命名为 bar.html
 
1、重命名文件,以防 git 把文件从文件系统中永久删除
mv foo.html bar.html
 
2、从 git 中删除 foo.html
$ git rm foo.html
 
3、向 git 中添加 bar.html
$ git add bar.html
 
4、提交修改
$ git commit -m “some message”

 

简单的方法:

$ git mv foo.html bar.html
 
$ git commit -m “some message”

 
 
 
 
 
 
 
 

git分支开发基本规范


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
常设分支

常设分支就主分支(master)和开发分支(develop)两个即可,另外的功能分支(feature)、预发布分支(release)和维护分支(hotfix)属于临时分支,用完之后应该及时删除。

So,在正式开发中,Git 的分支管理如下:

在这里插入图片描述

 
 

git合并分支

git merge

1、在合并之前要先解决分支的冲突问题
在这里插入图片描述

 
 

git删除分支

git branch -d 分支名
或
git branch --delete 分支名

 
 

git寻找所有commitId

git reflog

在这里插入图片描述

 
 
 
 

github

如果是新的仓库,但是已经生成了ssh,则如下操作

1、git remote add <remotename> 远程仓库地址
2、git pull <remotename> main --allow-unrelated-histories
3、git branch --set-upstream-to=<remotename>/main master
4、git push

 
 

获取ssh

ssh:为某个电脑分配固定的密钥,通过此密钥可以不通过账号和密码来连接github

1、打开git bush,并输入以下内容

$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

2、输入密钥存放目录(可默认)
在这里插入图片描述

3、输入密钥口令(可空)
在这里插入图片描述

4、密钥产生成功
在这里插入图片描述
5、找到密钥保存的目录,打开.pub文件 密钥在这里
在这里插入图片描述
 
 

配置ssh

1、登录github,如下图点击setting
在这里插入图片描述

2、点击new shh
在这里插入图片描述

3、将密钥放入key中,title可写可不写,点击Add SSH key
在这里插入图片描述

4、SSH key配置成功
在这里插入图片描述

 
 

创建新项目

1、New repository
在这里插入图片描述

2、创建新项目
在这里插入图片描述

3、空仓库创建成功
在这里插入图片描述
 
 

将本地的git仓库推到github上

1、关联

git remote add origin https://github.com/alunAlunnnnn/gittest.git

上面这串命令在这
在这里插入图片描述

2、在本地仓库目录下的git bush中运行命令
在这里插入图片描述

3、将本地仓库的数据推送到github

git push -u origin master

弹出login
在这里插入图片描述

4、推送成功
在这里插入图片描述

5、刷新仓库,内容显示
在这里插入图片描述

6、创建分支
在这里插入图片描述

7、从本地push到github新分支中
使用命令

git push origin master:分支名
如:
git push origin master:dev
master:dev的含义 master 本地的分支名,dev github上的分支名

在这里插入图片描述

8、push成功
在这里插入图片描述 
 

从github拉取到本地

1、获取clone连接
在这里插入图片描述

2、进入某个目录,并执行

git clone 链接

在这里插入图片描述

3、拉取成功
在这里插入图片描述

4、如果要切换分支,先用以下命令查看有哪些分支

git branch -va

在这里插入图片描述

5、通过git checkout切换到目标分支

git checkout remotes/origin/dev

在这里插入图片描述

在这里插入图片描述

6、分支切换成功
在这里插入图片描述

 
 

企业级工作流程

非正常状态

1、在有代码需要提交的时候,先从master分支拉取代码,查看代码是否有新增和冲突,解决完冲突以后再推送

git pull origin master

 

2、推送到master

git push origin master:master

正常状态

1、将master分支pull下来,确认无冲突

2、将本地代码推送到github的自己分支上去

3、提交请求
在这里插入图片描述

 

4、填写相关信息,并@主管
在这里插入图片描述

 

5、主管查看完后,若通过则自动合并进去
在这里插入图片描述

 
 
 
 

git错误记录

 
 

$ git push —— Updates were rejected because the tip of your current branch is behind

原因:本地库的版本落后(不相同)于远程仓库

解决方法:
1、先git pull origin 分支名,合并后再git push

$ git pull origin master:master
$ git push origin master:master

git pull此步可能会报错拒绝合并两个不相关的库 “fatal: refusing to merge unrelated histories”,可以强制将远程库拉下来进行合并

$ git pull origin master --allow-unrelated-histories

强制拉取并合并后再push

2、强制将本地库推送到远程库,会使远程库被覆盖(多人开发不可取)

$ git push -u origin master -f 

 
 
 
 

git远程库管理

 
 

当推送到服务器时首先要添加远程地址的

$ git remote add origin gitAddress

 
 

查看本地添加了哪些远程地址

$ git remote -v

 
 

删除本地指定的远程地址

$ git remote remove origin gitAddress
posted @ 2022-06-05 20:49  阿伦alun  阅读(73)  评论(0编辑  收藏  举报