Git笔记

本文详细介绍了Git的工作机制,包括常用命令如SSH免密配置、暂存区管理、分支操作、代码拉取与合并、冲突解决等。此外,还讲解了团队协作中如何创建远程仓库,以及如何将代码推送到GitHub。重点讨论了merge与rebase的区别,并提供了冲突解决的策略。
摘要由CSDN通过智能技术生成

git工作机制

在这里插入图片描述

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

git常用命令

在这里插入图片描述

在这里插入图片描述
Instead of配置

git config --global url.git@github.com:.insteadOf https://github.com/

将ssh协议替换为https协议

Git命令别名配置

git config --global alias.cin "commit --amend --no-edit"

用cin代替commit --no-edit

SSH免密配置

SSH可以通过公私钥的机制,将生成公私钥存放在服务端,从而实现免密访问
目前的Key的类型有四种,分别是dsa、rsa、ecdsa、ed25519默认使用的是rsa,由于一些安全问题,现在已经不推荐使用dsa和rsa了,优先推荐使用ed25519.

ssh-keygen -t ed25519 -C "your_email@example.com" 密钥默认存在~/.ssh/id_ed25519.pub

添加暂存区

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

git reset --files #撤销最后一次git add files,也可以用git reset撤销所有stage缓存
git checkout -- files #把文件从 stage 缓存复制到工作目录,用来丢弃本地修改

stash:保存现场

1.建议(规范):在功能未没有开发完毕前,不要commit
2.规定(必须)在没有commit之前,不能chekcout切换分支

如果还没有将某一个功能开发完毕,就要切换分支: 建议 1.保存现场 (临时保存,stash)2.切换

保存现场: git stash save “名字”
还原现场: git stash pop(将原来保存的删除,用于还原内容)
git stalish apply(还原内容,不删除原保存内容)
git stalish drop(删除stash内容)
查看现场: git stash list

git rm x:删除已提交的文件后,文件会被放到暂存区
彻底删除:git commit -m “删除的文件”

git reset restore --staged 文件名 #指定文件回退到最近一次执行push后的的状态,清空暂存区,同时回退工作区文件状态。
git restore 文件名 #

rm :删除后的文件不会放到暂存区

git rm等价于rm + git add

git checkout – <file_name> 丢弃工作区的修改,并用最近一次的commit内容还原到当前工作区

提交本地库

在这里插入图片描述

在这里插入图片描述
上一次的commit注释重写(重写提交说明)

git commit --amend -m '修正'

修改历史版本:

git commit --amend
//通过这个命令可以修改最近的一次commit信息,修改之后commit id会变
git rebase
//通过git rebase -i HEAD~3可以实现对最近三个commit的修改
//1.合并commit
//2.修改具体的commit message
//3,删除某个commit
git filter --branch
//该命令可以指定删除所有提交中的某个文件或者全局修改邮箱地址等操作
git reflog 查看引用日志信息
git log 查看详细日志信息

删除commit:

GC:
可以删除一些不需要的object,以及会对object进行一些打包压缩来减少仓库的体积

Reflog:
reflog是用于记录操作日志,防止误操作后数据丢失,通过reflog来找到丢失的数据,手动将日志设置为过期

git reflog expire --expire=now --all

指定时间:
git gc --prune=now 指定的是修剪多久之前的对象,默认是两周前

git gc --prune=now

版本穿梭

在这里插入图片描述

在这里插入图片描述

git reset --hard HEAD^ #前进一个版本
git reset --hard HEAD^^#前进两个版本

在这里插入图片描述

git tag v0.0.1//生成版本
git tag -a v0.0.2 -m "add feature 1"//创建版本并加备注信息
#推送标签
git push origin v1.0 v2.0

#推送所有标签
git push origin --tags
#拉取git指定标签
git fetch origin tag v4.0
#删除远程标签
git push origin  :v1.0

分支

在这里插入图片描述
分支实际就是一个commit链,一条工作记录线
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
分支切换是让head直接指向切换到的分支

git branch -m <old branch name> <new branch name>

本地没有a分支,但本地却感知远端的a分支
检测:git remote prune origin --dry-run

git remote prune origin --dry-run

代码拉取

在这里插入图片描述

代码合并

git merge 被合并分支

git merge 被合并分支 --squash 
目标分支的commit会合并成一个后再跟当前分支进行合并

在这里插入图片描述
不加–squash
在这里插入图片描述
加–squash

1.Fast-Forward
不会产生一个merge节点,合并后保持一个线性历史,如果target分支有了更新,则需要通过rebase操作更新source branch后才可以合入
在这里插入图片描述

2.Tree-Way Merge
三方合并,会产生一个新的merge节点
在这里插入图片描述
git diff
在这里插入图片描述

git rebase
冲突解决问题

vi ... add ...commit
git rebase 分支 --continue 

git rebase 分支 --skip #rebase冲突时,用rebase对应分支的值

终止。还原成rebase之前的场景
git rebase --abort

建议:不要再master上不要直接rebase

团队协作

在这里插入图片描述

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

创建远程仓库

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
拉取: git pull 别名 分支

同一个Origin设置不同的Push和Fetch URL

git remote add origin git@github.com:git/git
git remote set-url --add --push origin git@github.com:MY_REPOSITY/git
git push -u origin dev #上传dev分支
git push origin dev:dev2 #本地dev推送到远端dev2
git push origin HEAD:dev #将当前分支推送到远端dev

使用git将代码上传到github

  1. 进入文件夹输入:git init 在本地创建git仓库
  2. 输入:git add . 将文件夹全部数据添加到暂存区
  3. 输入:git commit -m “注释内容” 将暂存区文件上传到git仓库
  4. 在github上创建仓库在这里插入图片描述
    5.输入:git remote add origin https://github.com/xxxxx/test.git,和远程仓库连接
    在这里插入图片描述
  5. 输入 git branch -M main ,上传到 main 分支
  6. 输入 git push -u origin main 将本地项目推送到远程仓库

git冲突及其解决

git冲突的原因:
在这里插入图片描述
提交者的版本库<远程库

如何实现本地同步:git pull

问题及解决

kex_exchange_identification: Connection closed by remote host Connection closed by 20.205.243.166 po

ssh -T git@github.com -p 22

git的一些问题

merge和rebase区别

merge:
在这里插入图片描述
rebase:
在这里插入图片描述

merge合并时,会根据两个合并共同的父节点和两者的最新提交三者合并,形成一个最新的提交
rebase合并时,会把两个合并共同的父节点之后的节点嫁接到一起,然后接到共同节点之后

git merge 的优势:

1.日志非常详尽,可以帮助理解每次merge发生的方式和时间的完整历史
2.发现错误并解决它们很容易

git merge的缺点:

笨拙的日志/历史记录

git rebase 的优势:

1.日志是线性的
2.完成项目很容易

缺点:

无法追踪在目标分支上合并和commit的时间和方式

git cherry-pick

git cherry-pick [commit hash] 将其他分支上已提交的commit在当前分支再提交一次,产生新的commithash
git cherry-pick commit-idA…commit-idB 该指令是将从commit-idA开始到commit-idB之间的所有commit-id提交记录都合并过来

建议:

1.在共享分支上使用Git Merge
2.在私有分支上使用Git Rebase

git pull和git fetch

git fetch只会将远程仓库的代码更新到本地库,但是不会自动合并到工作目录
git pull会将远程仓库的代码更新到本地仓库,并且自动进行合并操作

git diff
在这里插入图片描述
git diff A…B 比较的是B的head跟A和B的公共节点的区别
git diff A…B 比较的是A的head跟B的head的不同

git diff比较的是工作区和暂存区的区别
git diff --cached sha1值 比较的是暂存区与对象区的区别

git blame 文件名 查看文件的所有提交以及每一行的作者

交互式rebase

git rebase -i

在这里插入图片描述
顺序调整:
在这里插入图片描述
squash指令:
在这里插入图片描述
drop指令:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值