git 使用的一些零碎笔记

概念

在这里插入图片描述

Workspace:工作区
Index / Stage:暂存区
Repository:仓库区(或本地仓库)
Remote:远程仓库

HEAD :想象为当前分支的别名

拉取:会把你本地仓库没有 而远程仓库有的更新写到你本地中,
获取:更多的是用来查看对于你本地仓库的状态来说远程仓库是否有更新,并不会使你的本地仓库发生改变

常用命令

1----将修改放入暂存区:

git add .

2----从暂存区将代码提交到本地

git commit -m tijiao 

3----从本地将代码推送到远程

git push

4----从远程拉取

git pull

5----丢弃还没有放入暂存区的修改 也就是丢弃工作区的修改

git checkout -- *

6----暂存区的修改就是已经你已经将文件 add,但是还没有commit的时候。 此时HEAD仍然指向最近一次提交的commit,放弃暂存区的修改,就是将已经放入暂存区的修改退回到工作区中

git reset HEAD

7----强制丢弃工作区和暂存区修改
–方式1

git reset --hard

–方式2
–先将放入暂存区的修改退回到工作区
–再丢弃所有工作区的修改

git reset HEAD          
git checkout -- *        

8----push或者pull报错1
今天用Git提交代码,先拉取代码的时候,Git报了一个错误:

The requested URL returned error: 429

然后从网上搜索了一下解决方法,原来是提交代码大小的问题,git单个文件默认大小是50M,超过50M,会给出warning。大于100M会无法提交。可以通过命令,修改单个文件默认大小(以设置500M以例):

git config --global http.postBuffer 524288000 

9:—贮藏
贮藏就是将工作区的修改保存起来,让工作区恢复干净

git stash

更换sourcetree使用的git

在安装sourcetree的时候一般也会默认安装一个版本的git,这个git称之为sourcetree的内嵌git
在这里插入图片描述

查看提交

命令行

git show commitid

soucetree
在这里插入图片描述
根据条件筛选:
作者:
提交消息:
文件变化:
在这里插入图片描述

常见报错

案例1

fatal: unable to access 'https://github.com/.../.git': Could not resolve host: github.com

解决办法:执行以下命令

git config --global --unset http.proxy 
git config --global --unset https.proxy

案例2

Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.

解决办法:
进入到下面这个文件夹里,删掉index.loc即可
在这里插入图片描述
案例3:
报错

The authenticity of host '192.168.4.58 (192.168.4.58)' can't be established. ED25519 key fingerprint

解决办法:
其实就是加一个白名单,执行下面命令
在C:\Users\pc.ssh这个文件夹下会生成known_hosts这个文件

ssh  -o StrictHostKeyChecking=no  192.168.0.xxx

案例4:

上班的第一天,上司大哥都会说:待会给我发个公钥吧。
这里说的公钥其实就是id_rsa.pub。
上司大哥是要把我们的客户端公钥上传到服务器,然后再把这个客户端公钥添加到authorized_keys。
添加后,服务器就会认为你这个客户端为可信任。你则可以访问这个服务器了。
获取id_rsa.pub
终端输入
ssh-keygen
1
一路回车,最后会看到一个矩形的图案。
你这时ls是看不到.ssh文件夹的。

cd .ssh/
1
这样就会切换到.ssh,再ls
就会看到id_rsa 和id_rsa.pub

在这里插入图片描述

给sourcetree添加公玥
第一步:切换客户端 OpenSSH
第二步:你就看到 ssh密钥路径就出现了啊
在这里插入图片描述
案例5:
在git文件夹下打开git 命令行
输入路径 可以不跟踪某个文件

git update-index --assume-unchanged path

案例6
git修改用户的名字:
在这里插入图片描述
案例7
如果有某个文件,git已经跟踪,但我们不希望再提交他了,也不可以不跟踪它,就是我们人为提交这个文件的时候,会有一个提示,拦截我们,提醒我们无法提交这个文件,此时可以增加一个钩子
比如在git的主目录下有一个main.lua文件,我们可以这么做
生成pre-commit这样一个文件,将这个文件放在.git/hooks文件夹下
文件内容如下:

#!/bin/sh
#
# An example hook script to verify what is about to be committed.
# Called by "git commit" with no arguments.  The hook should
# exit with non-zero status after issuing an appropriate message if
# it wants to stop the commit.
#
# To enable this hook, rename this file to "pre-commit".

git diff --cached --name-only  | \
	grep -E -i "main.lua" && echo && exit 1

exit 0

案例8:
从远程拉取数据报错如下:

git -c diff.mnemonicprefix=false -c core.quotepath=false --no-optional-locks fetch origin
remote: HTTP Basic: Access denied
fatal: Authentication failed for 'http://192.168.5.146:8888/fgcs/protocol.git/'
remote: HTTP Basic: Access denied
fatal: Authentication failed for
 'http://192.168.5.146:8888/fgcs/protocol.git/'
remote: HTTP Basic: Access denied
fatal: Authentication failed for 'http://192.168.5.146:8888/fgcs/protocol.git/'
remote: HTTP Basic: Access denied
fatal: Authentication failed for 'http://192.168.5.146:8888/fgcs/protocol.git/'

解决办法:
sourcetree 一般安装的时候 会自带一个内置的git 即embedded,但这个git安装下载的时候,往往会出问题,所以我们就自己从官网上下载了git来安装到系统中,最后和github交互的是这个系统中的git,偶尔有一天,你又在sourcetree中下载了内置的git,这样你又把git的使用版本切换到内置版本,所以你无法和之前的github拉取和推送了,这个时候需要重新设置一下
内置的git:生成密钥–》github
系统的git:生成密钥----》github
在这里插入图片描述
案例9:
本来是可以推送的,突然就无法推送了,找到密钥的地方

Connection reset by 13.229.188.59 port 22
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

尝试连接github,发现连不上 ,但我们的密钥确实给了github了啊

ssh -T git@github

如下图:发现知道的host出现了两个,还有一个old
解决办法:就是将old的host内容拷贝到 known_hosts这个文件末尾即可
在这里插入图片描述
还有一种方案:就是在浏览器上登录github,然后再推送试一下

修改全局配置

在这里插入图片描述

解决冲突

认真看完下图
解决冲突以后,记得在sourcetree界面标记冲突已解决
在这里插入图片描述

遴选 or cherry-pick

在这里插入图片描述
当进行多人合作的时候,遴选的功能就体现出来了,比如很多人都往一个分支上提交代码,那么你每一次提交自己的东西,就会要首先拉取到最新,然后才可以提交你的代码,你这里拉取到最新,其实就是把远程最新的代码拉到你本地,然后和你的内容进行合并,合并完以后,你才可以提交,你这时候提交的东西包含你自己的内容和你拉取下来最新的内容,那么将来有一天,你希望某个分支的某一次提交,你只希望将自己的内容合并出来,那么就可以使用遴选功能了啊

回滚提交

在这里插入图片描述
执行回滚提交很容易产生冲突
我在提交记录3增加一个函数:cjzRiBen4
我在提交记录4增加一个函数:cjzRiBen5
如果我在提交记录3进行回滚,会产生冲突,因为我在提交记录4又对该文件增加了一个函数,所以产生冲突如下:给我以下几种选择,
第一种:HEAD表示当前的改变,存在4和5这两个函数,当前的改变是指当前文件的所有git提交,我们在提交记录4的时候,新增一个函数5,在提交记录3的时候,新增一个函数4,所以当前的改变存在4和5这两个函数
第二种:Incoming表示回滚所产生的改变,删掉了4这个函数,由于在记录3的时候还没有5这个函数,所以,他的改变也不存在5这个函数,因此它将同时删除4和5这两个函数
第三种:两者合并
在这里插入图片描述
回滚提交:其实就是删除本次的提交改变,但是如果后边的提交记录存在对本次提交某个文件进行修改,就会产生冲突,就像上面那样,否则不会产生冲突
举个例子:如果我们在某一次提交了一个功能,后边的提交也没有包含对这个功能所牵扯到的任何文件进行修改,忽然策划说这个功能不要了,那么我们就可以很方便的找到这次提交然后进行回滚,就可以一次性删除掉所有的改变的改变文件,还原最初的模样,这是回滚最好的使用,当然如果后边的提交记录存在对本次提交相关的文件修改,那就会修改,这就需要手动解决冲突了,
一句话:回滚提交指的就是我想把我某一次的修改删除掉

回滚区块:
上面说的回滚提交是指对一次大的提交记录进行回滚,回滚区块可以对某一次提交修改的某一个文件的某一处修改,比如:
在这里插入图片描述
我们在5进行了回滚提交,删除掉了4和5这两个函数,现在我想加回来,则直接执行回滚区块,然后提交即可
重置当前分支到此次提交
软合并:将当前提交之后的所有改动都提交到暂存区,等待处理
混合合并:将当前提交之后的所有改动都提交到工作区,等待处理
强行合并:将当前提交之后的所有改动都丢弃,无需处理
在这里插入图片描述

我们想某一个分支某一个节点以后的提交记录都不要了,如何操作?
就是使用这个操作,
这个操作执行完以后,你的工作区会出现这个节点以后的修改记录,你可以根据你的需要来自己选择是否要保留,一般情况直接丢弃,丢弃完以后你的工作区就干净了,这个时候由于远程和你本地比较,远程的代码还是你本地没有执行重置的代码一样,远程就会出现需要你拉取的情况,此时你需要命令行操作 git push --force,用你的本地强行修改远程,最后你的分支就是下边这张图一样,这个节点以后的提交记录将会被丢弃,ok

在这里插入图片描述
此时你心血来潮,想把之前合并的再合回去,按照下边的图示即可
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值