git 学习笔记

官网文档

https://guides.github.com/activities/hello-world/

版本库介绍

工作区有一个隐藏目录 .git (执行git init 会生成) ,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为 stage(或者叫index) 的暂存区,还有Git为我们自动创建的第一个分支 master,以及指向master的一个指针叫 HEAD

在这里插入图片描述

git 的存储形式是对象,对象类型有三种:commit(是一个文件)、tree(是一个目录)、blob(是一个文件)。

.git 目录下几个关键目录:
HEAD:文件,存放当前分支的索引,如ref: commit号
refs:文件夹,存放heads、remotes、tags,即所有分支和tags的相关信息。
config:文件,存放git的配置信息,如username、user.email。
objects:git 的对象(即三种对象类型)之间的关系。
通过命令修改等价于直接修改以上文件内容,都会生效。

在这里插入图片描述
查看git管控的文件
git cat-file -t [hash-id] :查看 hash-id 对应的类型(三种);
git cat-file -p [hash-id] :查看 hash-id 对应的内容;
其中 [hash-id] 表示对象的唯一 hash标识。

gitksourceTree等 相当于 git log UI。

commit、tree、blob 三者之间的关系:
在这里插入图片描述

分离头指针:
HEAD 指向一个commit而非branch时,HEAD 的内容就是分离头指针。否则指向branch。
不要在HEAD指向分离头指针时修改提交内容,因为这样git会当作垃圾处理,一段时间后会清掉。要基于branch修改提交。

常用命令

修改commit message(注释)

  • 修改当前commit message:git commit --amend
  • 修改老的以前的commit message:git rebase -i 【要修改的commit的父亲的commitid】,即重新变基到父commit。
    这里要修改一堆老commit message,则可以通过选择他们的父类批量修改。

合并多个commit
合并多个连续commit:git rebase - 【父commitid】 再使用s命令
合并多个不连续commit:与连续的一样,只是要手动修改pick commit的顺序后,再使用s命令

删除commit/暂存区中文件

git rm 【文件名】
git commit -m "delete 文件名"

暂存当前修改
git stash
git stash apply --弹出stash中的内容,并保存stash的栈索引使可一直使用
git stash pop --弹出stash中的内容,并删除stash的栈索引

Git恢复之前版本的两种方法:
reset、revert。

reset:
如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以用这种方法。
git reset --hard 【目标版本号】

revert:
如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法。
git revert -n 【目标版本号】
并使用
git commit -m '添加注释'
提交。

reset、revert(图文详解):https://blog.csdn.net/yxlshk/article/details/79944535

回退代码
get reset --hard HEAD^ 重置stage区和工作区,即擦除整个commit的内容
get reset --soft HEAD^ 保留工作目录,并将commit的内容放进stage区
get reset --mixed HEAD^ 保留工作目录,并将commit的内容、stage区内容都放进工作区
get reset HEAD^ 同 get reset --mixed HEAD^

其中Git reset 三种模式详解: https://www.jianshu.com/p/c2ec5f06cf1a

备份
clone:
克隆到本地,
git clone 【远端仓库地址】

fork:
复制别人的仓库到自己的远端仓库:
https://editor.csdn.net/md/?articleId=104010332
直接在 github 上操作 fork。

本地仓库与远端仓库建立关系
git remote add 【远端仓库别名】【远端仓库地址】

本地现有项目添加git追踪并推到已有仓库(一般为空仓库)
cd existing-project
git init
git add --all
git commit -m "Initial Commit"
git remote add origin-name ssh://git@** 注:一个项目至少关联一个远端git仓库地址
git push origin-name master

本地现有被追踪项目要推送到其它origin仓库
cd existing-project
git remote set-url origin ssh://git@**

远端仓库同步信息到本地仓库
git fetch【远端仓库别名】【远端仓库指定分支】 --拉取远端仓库指定分支代码
git merge【远端仓库别名】【远端仓库指定分支】–将从远端拉取后的代码合并到本地中
git pull 相当于 git fetch + git merge

本地commit强推到远端,会覆盖远端
git push -f origin master

git 三剑客
git gitlab github

工作中补充
链接:

常见问题收集

问题一描述

执行 git push origin 时报错,如下:
在这里插入图片描述

解决办法

执行

git remote add code-na2 git@github.com:code-na2/mos-mss.git

即发现远程仓库有问题,所以重新关联到新的远程仓库。

解决过程
  1. 查看本地配置
git config -- list    查看当前项目下所有 git 相关配置

配置结果:
在这里插入图片描述

credential.helper=osxkeychain
user.name=赵娜
user.email=zhaona12@meituan.com
url.https://.insteadof=git://
url.git://.insteadof=https://
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
core.precomposeunicode=true
remote.origin.url=https://github.com/gitna2/mos-mss.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
branch.feature-5721399.remote=origin
branch.feature-5721399.merge=refs/heads/master
remote.upstream.url=https://github.com/gitna2/mos-mss.git
remote.upstream.fetch=+refs/heads/*:refs/remotes/upstream/*

即包含用户名、邮箱、所有关联的远程仓库 remote(这里是origin、upstream)、及对应仓库下分支。

从结果发现远程仓库配置url有问题,故可删除现有错误配置,重新设置远程仓库。

  1. 重新关联现有远程仓库相关设置或直接新建一个远程配置

先删除现有 origin 关联(直接新建远程配置时不用):

git remote remove origin

再添加新的远端仓库并设置别名,这里使用别名 code-na2:

git remote add code-na2 git@github.com:code-na2/mos-mss.git
  1. 查看本地仓库下 branch
git branch -r

发现没有关联分支,所以要拉取代码:

git fetch code-na2

这样,再执行:

git push origin feature-5721399

就成功了
在这里插入图片描述

涉及关键命令
git config -- list    查看当前项目下所有 git 相关配置
git remote remove origin		删除现有远端仓库关联
git remote add code-na2 git@github.com:code-na2/mos-mss.git	添加远端仓库关联
git fetch code-na2		从远端拉去分支
git branch -r		本地所有仓库下 branch
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值