git命令和应用

git 结构

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

1、初始化仓库,生成.git文件夹
git init
2、添加到暂存区
git add test1.txt   

-A 可以一次提交全部修改

3、添加到本地仓库
git commit –m “第一次提交”

-m后边跟的是描述

4、查看仓库当前状态
git status

请添加图片描述

5、查看修改的文件的前后对比
git diff test1.txt

请添加图片描述

6、查看操作记录
git log

请添加图片描述
*查看短版本号 且 输出一行

git log --oneline --pretty

*查看分支图

git log --graph
7、回退版本
(1)回退一次
$ git reset --hard HEAD^

请添加图片描述

(2)回退两次可以
$ git reset --hard HEAD^^

多次
当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100、

(3)根据版本号回退到某一个版本
git reset --hard a0016a25  // 可以不用输全  
8、取消回退的方法
(1)命令行窗口还没有被关掉

回退以后知道以前提交版本号id,可以回到回退之前,版本号id可以不用写全
请添加图片描述

(2)命令行窗口已经关掉了
 git reflog 记录你的每一次命令

请添加图片描述

9、查看工作区和版本库里面最新版本的区别

git跟踪管理的是修改而不是文件
git commit提交只会提交暂存区中的文件,没有提交暂存区中的文件不会存到本地仓库

查看工作区和版本库里面最新版本的区别命令:

git diff HEAD -- test1.txt
10、撤销修改
(1)如果修改还没提交到暂存区
git checkout -- test1.txt

请添加图片描述

(2)如果修改已经提交到暂存区

先把暂存区的修改撤销掉

git reset HEAD test1.txt

请添加图片描述

再用checkout

git checkout -- test1.txt
11、删除

rm命令就是在工作区删文件
git rm就是删文件,并且把删文件的修改提交到暂存区
相当于rm删文件后,git add 提交,保存修改

可以通过

git checkout -- test1.txt

恢复

12*、连接远程仓库

类似gitee github传输时通过ssh加密的

第1步:创建SSH Key。

在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),
创建SSH Key:

$ ssh-keygen -t rsa -C "youremail@example.com"

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人

第2步 以gitee为例,将公钥粘贴即可

请添加图片描述

GitHub需要SSH Key原因
因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。

13*、将远程仓库和本地仓库关联(本地存在一个仓库时和远程关联)

建立关联

(1)建立远程仓库的 关联
git remote add origin 仓库ssh地址
(2)内容推送
git push -u origin master 

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令直接用

git push origin master

删除远程库
查看远程库信息:

 git remove -v

请添加图片描述

然后根据名字删除

git remote rm origin 仓库名
14*、从远程库克隆(在远程建立仓库,直接克隆,大多数都这么操作)
git clone <http或者ssh地址>
15、分支管理
(1)创建分支dev
git checkout -b dev

相当于

git branch dev          // 创建
git checkout dev         // 切换

请添加图片描述
提交远程分支

git push -u origin master  
git push --set-upstream origin <branch>
(2)查看分支
git branch

请添加图片描述

(3)合并分支 将dev修改合并到master上

切换到master后

git merge dev

请添加图片描述

合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

禁用快速提交的方法

git merge --no-ff feature 

**

(4)删除分支dev

删除本地分支

git branch -d dev

删除远程分支

git push origin --delete <branch>       -d -D

在这里插入图片描述

switch方法切换分支
我们注意到切换分支使用git checkout branch名,而前面讲过的撤销修改则是git checkout – file名,同一个命令,有两种作用,确实有点令人迷惑。
实际上,切换分支这个动作,用switch更科学。因此,最新版本的Git提供了新的git switch命令来切换分支:
创建并切换到新的dev分支,可以使用:

git switch -c dev

直接切换到已有的master分支,可以使用:

git switch master
16、推送push , 拉取 pull (fetch + merge)
git pull origin 分支名
git push origin 分支名
17、.gitignore 失效的原因

目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore只能忽略那些原来没有被追踪的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
解决:

(1)清除缓存
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
git push -u origin master
(2)删除远程仓库中相应文件
18、gitignore语法
(1)规则
空格不匹配任意文件,可作为分隔符,可用反斜杠转义
开头的文件标识注释,可以使用反斜杠进行转义
! 开头的模式标识否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用 ! 也不会再次被包含。可以使用反斜杠进行转义
/ 结束的模式只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件
/ 开始的模式匹配项目跟目录
如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不在 .gitignore 文件中,则相对于项目根目录
** 匹配多级目录,可在开始,中间,结束
? 通用匹配单个字符
* 通用匹配零个或多个字符
[] 通用匹配单个字符列表
(2)示例:
 bin/: 忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件
/bin: 忽略根目录下的bin文件
/*.c: 忽略 cat.c,不忽略 build/cat.c
debug/*.obj: 忽略 debug/io.obj,不忽略 debug/common/io.obj 和 tools/debug/io.obj
**/foo: 忽略/foo, a/foo, a/b/foo等
a/**/b: 忽略a/b, a/x/b, a/x/y/b等
!/bin/run.sh: 不忽略 bin 目录下的 run.sh 文件
*.log: 忽略所有 .log 文件
config.php: 忽略当前路径的 config.php 文件
19、解决冲突的步骤

在这里插入图片描述

git reset

在这里插入图片描述

20、git stash的应用

当自己开发一个a需求时尚未开发完成,有一个更着急的b需求优先级高于a,现在因为现有的需求没有开发完,所以不想commit一个版本,就可以用 git stash 命令缓存并移除修改的代码。

(1)git stash
git stash // 直接缓存,缓存名称为最新一次commit的内容,如果没有本地提交则是拉远程仓库是的commit内容
git stash save "xxx"  // 加上自己的注释进行缓存

stash 只会操作被git追踪的文件

如图:

a、首先查看文件状态

在这里插入图片描述

b、现在执行 git stash 暂存文件 git stash list 查看缓存的列表

在这里插入图片描述

c、再次查看文件状态,发现新增的文件并没有被缓存并删除

在这里插入图片描述


结论:stash后新增的文件并没有进入缓存,这是因为git还没有追踪这个新增的文件,需要进行git add < 文件名 > 让git追踪这文件,再进行stash就可以对新文件进行操作。

(2)git stash list

返回缓存的列表

(3) git stash pop

将堆栈中最新的内容pop出来应用到当前分支上,且会删除堆中的记录
pop在堆栈中删除了这个缓存
如果pop出来的内容有冲突,git会中断此次pop并告知你需要进行冲冲突解决
也可以指定堆栈中的记录通过在git stash pop后面加上git stash list中的名称

git stash pop stash@{0}
(4) git stash apply

与pop相似,但他不会在堆栈中删除这条缓存,适合在多个分支中进行缓存应用
也可以进行指定

git stash apply stash@{0}
(5)git stash drop/git stash clear

删除缓存

git stash drop [名]   // 删除单个缓存 举例git stash drop stash@{0}
git stash clear    // 全清
(7)git stash show

git stash show [名] // 显示与当前分支差异

git stash show stash
(8) git stash branch

指定最新缓存创建分支


21、更改当前本地仓库的远程仓库地址
git remote set-url origin <远程仓库地址>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值