git操作

提示:这个文档是用来整理git的相关操作


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、git pull

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

1、第一个问题:git pull会覆盖本地代码吗

答:不会。git pull会自动将远程代码合并到本地。如果本地和远程相同文件有差异,会提示冲突,需要解决冲突。

远程与本地文件不同

执行git pull不会报错,本地修改记录存在。这个是建立在远程和本地没冲突的情况。这个是本地比远程多记录。

更改远程.c文件,增加一个与本地不同的记录,执行git pull

提示:Your local changes to the following files would be overwritten by merge:
git Reset test.c
Please commit your changes or stash them before you merge.

中文:本地有未提交文件(本地验证的修改确实没提交)。请提交修改文件。这边有两个方法,提交本地;或者拉取远程文件,这边拉取远程文件试试。

拉取后没反应,继续报相同的错,我勾选合并试试

还是不行,看来只能先提交本地记录了

但是commit提交也不行。。。让我git pull

然后我没有办法,只能git pull,这个时候突然显示有冲突了。

同时保留两处差异,点击“标记为已解决”

执行commit,然后push

执行push

push成功

前面push成功之后,本地修改,再提交提示报错

那我就按照提示,git pull拉取 

竟然出现这个错误

这个是没想到的,那我就 

修改成这样

commit, push 

远程成功

 总结:本地比远程多记录,即没有冲突,那么git pull不会报冲突,本地不会被覆盖。如果远程本地有冲突,那么git  pull会报冲突,需要解决冲突,解决冲突后可以push。

二、creat branch新建分支

1.过程

介绍一下整个过程

首先是这样的,我是从远程拉取代码到本地。然后为了适配,简单修改了代码,这时候我就想基于修改后的代码继续加法,就想新建一个自己的分支,把修改后的代码上传到修改后的新分支。下面是过程:

我在修改后的代码工程上新建分支,develop_zyf,push分支。查看远程仓库,确实有了新分支。

我换个了文件夹,将develop_zyf代码拉取下来,编译一下验证是否是自己的代码。有报错,看报错点还是之前修改前的问题。这个时候我就意识到,之前的操作和我自己预想的是不符的。

这时候我就在想是不是因为新建分支是基于之前的分支,而本地的代码还没有上传到远程,所以拉去的代码不是修改后的。

这时候操作:尝试将本地代码push到远程,commit、push。确实成功了,本地代码上传到远程了。这时候在新目录的代码上执行git pull,代码更新后就是修改后的代码。

总结:新建分支、push时本地修改的代码是没有被push上去的。需要重新commit、push才行。新建分支这边也熟悉了呢!

2、过程

最近一直在试arm开源库编译脚本,因为只能在dragon上编译。然后个人仓提交了很多记录,现在就想把个人仓远程提交记录全部删掉。但是感觉可能会不保险。就创建分支develop,以develop作为master分支备份。等master删除提交记录后编译没问题再删掉develop。因为之前删除后再编译编译失败了。虽然但是最后发现可能不是删除远程提交记录导致的。但是还是备份一份吧。

操作过程:

新建分支develop

checkout到develop分支

push develop分支。

查看远程,实现创建分支并推送。

三、回退远程提交记录

tortoiseGit: git reset  (选hard)

git bash: git push origin HEAD --force   


2023年12月19日11:30:57

想删除远程仓库的两次提交记录,还是执行git bash: git push origin HEAD --force

但是报错:

查看这篇帖子:git push错误:You are not allowed to force push code to a protected branch on this project_git protected branch-CSDN博客

设置方式不一样,大概是仓库不是一个仓库,查看自己的仓库,如图

直接删除分支保护,因为是fork下来的个人仓。 

再次推送成功 !远程记录被删除。

不需要再push了,已经push过了

四、git commit 撤销操作详解

写完代码后,我们一般这样

git add . //添加所有文件

git commit -m "本功能全部完成"


执行完commit后,想撤回commit,怎么办?


这样凉拌:

git reset --soft HEAD^


这样就成功的撤销了你的commit

注意,仅仅是撤回commit操作,您写的代码仍然保留。


说一下个人理解:
HEAD^的意思是上一个版本,也可以写成HEAD~1

如果你进行了2次commit,想都撤回,可以使用HEAD~2


至于这几个参数:
--mixed 
意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。

--soft  
不删除工作空间改动代码,撤销commit,不撤销git add . 

--hard
删除工作空间改动代码,撤销commit,撤销git add . 

注意完成这个操作后,就恢复到了上一次的commit状态。

顺便说一下,如果commit注释写错了,只是想改一下注释,只需要:
git commit --amend

此时会进入默认vim编辑器,修改注释完毕后保存就好了。


4.2 新的理解

这次新的理解来源于茂盛指导的合并多条主仓提交记录。

个人仓多次提交记录合并成一条提交记录方法:

git log 查看多次提交记录

git reset [最早一次提交记录]

git push -f

tortoiseGit: git commit

这次又看了下bilibili,看了这个视频:Git reset三种常用模式区别和用法

对reset的三种模式理解的多了些

前提说明,分为三个区:

工作区本地修改,将工作区代码修改提交到暂存区需要使用git add指令
暂存区执行完git add后修改在暂存区,使用git commit后修改会被提交到到HEAD
HEAD即远程仓库

使用reset之后,HEAD的修改都会被回退。三种模式主要是影响工作和和暂存区

soft——HEAD修改被回退,暂存区和工作区不变,如果需要将修改提交到HEAD,执行git push

mix——暂存区也被修改,工作区不变。提交修改需要使用git commit,将修改提交到暂存区。

hard——本地修改也被回退。提交需要使用git add、git commit、git push。

下面使用tortoiseGit试下,不过好像git push -f也要使用git bash啊。

使用tortoiseGit进行reset时,选择mix,然后继续后面的操作,可以实现合并多条记录。

五、将远程仓新分支拉到fork的个人仓

远程仓库新增了分支,fork过来的个人仓想要把主仓的新分支加到个人仓。

之前继平教过我,但是我有忘了,自己捣鼓了一下搞好了。

具体操作,刚主仓的代码拉取下来,切换到新分支xxx,点击push,增加Remote个人仓地址。push时选择个人仓,执行push,成功!

叉会腰!
 

然后实际情况是这样的,我提交第三方库文件,里面有lib文件,commit正常,push提示失败。这时候就想重新提交,不选中lib文件。但是我不知道怎么重新commit,然后就百度,查到上面的资料,reset -soft就可以,实际执行起来,也确实可行。

2023年12月9日17:29:18

再次看想说的是上述的--mixed 等几个参数也对应tortoise里面git reset里面的几个选项。

---

六、.gitignore

1、创建

1、windows上创建.gitignore失败

需要以这种方式实现,cmd命令 使用指令

copy NUL .gitignore

成功在windows上新建.gitignore文件 

2、使用

2.1忽略规则

# 忽略所有以 .a 结尾的文件
*.a

# 不能忽略所有 lib.a 文件
!lib.a

# 仅仅忽略当前目录下的 TODO 文件
/TODO

# 忽略 build 目录下的所有文件
build/

# 仅仅忽略 doc 一个目录下的所有 .txt 文件
doc/*.txt

# 忽略 doc 目录下(包括子目录)的所有 .pdf 文件
doc/**/*.pdf

gitignore文件使用方法(gitignore教程)(git status --ignored)(git check-ignore -v <file>)_Dontla的博客-CSDN博客

2.2 根目录与子目录ignore处理

关于git:是否可以忽略子目录中的.gitignore规则? | 码农家园

已实现 

2.3案列

参考gitee源码提交

coluurpig/CSDNProjecticon-default.png?t=N7T8https://gitee.com/runruntiger/csdnproject

3、子文件夹创建gitignore文件

3.1原理

因为我的fireProject里面子工程比较多。所以想在子工程中新建gitignore。 查了下是可以这样做的。

工程中创建多个gitignore文件

为了解决这个问题,Git支持在项目的不同目录层次结构中使用多个.gitignore文件。这样,我们可以在特定的子目录下创建自己的.gitignore文件,以满足该子目录的文件忽略需求。这样做有助于提高项目的可维护性。

.gitignore文件的加载顺序

当Git加载.gitignore文件时,它会按照特定的顺序进行加载和应用。下面是.gitignore文件加载的顺序:

        1、全局.gitignore文件:位于用户主目录下的.gitignore文件,适用于整个计算机上的所有Git仓库。

        2、仓库根目录下的.gitignore文件:这是项目根目录下的.gitignore`文件,适用于整个项目。

        3、每个目录中的.gitignore文件:在每个目录中查找.gitignore文件,并按照目录结构依次加载。如果在某个子目录下找到了.gitignore文件,那么该文件中的规则将覆盖上层目录中的规则。

根据加载顺序,更具体的规则会覆盖较为通用的规则,使我们能够更细粒度地控制文件的排除。

 3.2 施行

在/fireproject项目中在E:\Gitee\fireproject\LibraryProject文件夹中新建gitignore文件,增加

//忽略文件夹
fireProject_led/Output/

 执行git comit,发现还是会出现output文件夹的很多*.o文件。

查了资料需要清除缓存,参考:.gitignore不生效问题解决方法_gitignore文件不生效-CSDN博客

需要执行清除缓存指令:

git rm -r --cached .

 再次提交,push后到远程仓库查看,确实成功把Output文件夹忽略掉了。

验证成功。

所以以前配置gitignore的时候感觉都是配不成功,原来是没有清除缓存啊。

3.3 规则

现在验证忽略规则。

即忽略某个文件夹,但是排除其中某个文件

参考:Git 的 .gitignore 配置规则_.gitignore 规则-CSDN博客

未验证

4、新增理解

4.1

tortoiseGit自带添加ignore选项

 忽略项

Ignore item(s) only in the containing folder                      仅忽略包含文件夹中的项目

Ignore item(s) recursively                                                   递归忽略项

.gitignore in the repository root                                          仓库根目录下的.gitignore

.gitignore in the containing directories of the items        .gitignore在项目的包含目录中

 选择根目录和递归,添加忽略项,忽略成功。

查看添加忽略的.gitignore文件,忽略非同级目录的3rd文件夹,方法是如下图

4.2

验证忽略文件夹除了几个子文件夹

查资料得到

```shell
# 忽略整个文件夹

your_folder/

# 但不忽略特定的子文件夹

!your_folder/exception_folder1/
!your_folder/exception_folder2/
```

验证不行

当修改了gitignore之后,需要执行[git rm -r --cached .]重新追踪文件,但是实际执行完这个指令后,重新commit后会出现很多文件,这时候需要执行[git add .]。下面开始验证下面的这种写法

```shell
git rm -r --cached .

git add .

3rd/*

!3rd/HuaweiSecureC/

!3rd/protobuf/
```

验证不行

其中需要注意的是,当遇到下面的情况时可以更改命令

$ git rm -r --cached .
error: the following file has staged content different from both the
file and the HEAD:
    .gitignore
(use -f to force removal)

使用git rm -rf --cached .

看了bilibili,得到几个知识点。

1、在前面加/从根目录匹配

2、在后面加/匹配文件夹。

再次尝试下面这种写法还是不行

```shell
3rd/*

!3rd/HuaweiSecureC/

!3rd/protobuf/
```

最后妥协逐个添加3rd下面需要忽略的子文件夹

七、主仓和fork仓同步

1、背景

事情是这样的,MapdispayTask很久没有提交代码了。然后个人仓(即fork仓)落后主仓很多,这时候想把主仓记录合并到个人仓。拉取个人仓代码到本地。tortoiseGit菜单push,不是真的push,点击manager,增加主仓地址。这边有个坑,马上揭晓。继续,然后执行pull将主仓代码拉取到本地并合入个人仓本地代码。然后执行push将本地代码推送到个人从仓。远程个人仓可以查看到最新的记录。而且push前不需要commit。

但是这边一开始处理的时候还有一个报错:

这个报错一开始还挺棘手的,不知道怎么处理了。但是我百度了一下,就意识到问题出在哪里了,就是增加主仓地址的时候,我拷贝的地址是地址栏的地址,实际上要用【克隆/下载】那边的git地址。

后面还验证了下,确实是这样。

八、分支间同步

原因:今天遇到的问题是,之前从主仓master拉了个分支叫做develop_1028,这个分支被同步到个人仓编写代码。但是这个个人从哪个的develop_1028因为各种冤隐一直没有实现需求,也就没有将个人仓分支develop_1028提交到主仓develop_1028。所以现在的情况就是,主仓develop_1028和主仓master存在差异。同时我个人仓还有一个从develop_1028拉取出来的分支,develop_updateJava分支。我现在在要做的是将主仓master的代码同步到主仓develop_1028。然后要将主仓develop_1028的最新代码pull到个人仓develop_1028。然后还要将develop_updateJava分支代码merge到develop_1028上。然后再将本地合并后的develop_1028分支代码提交到主仓develop_1028上,然后用这个代码编译发布包,上传到生产环境中。

下面是具体处理方法:

个人仓切换到develop_1028分支
git pull将主仓(origin)develop_1028分支代码pull到个仓develop_1028分支。
git pull将主仓(origin)master分支代码pull到个仓develop_1028分支。报冲突
解决冲突,这次是选择master分支上的代码
解决完冲突,git push本地代码到个人仓develop_1028分支。
下面执行merge,git merge将develop_updateJava代码合并到个仓develop_1028分支。这边似乎是没啥反应,然后执行git push,git push成功。
到主仓网页,执行合并操作,将个人仓develop_1028分支代码合并到主仓develop_1028分支。
完成任务。

九、多人开发冲突

多人开发冲突

如果遇到多人开发修改同一个文件,需要解决该文件的冲突,需要这样处理。

git push——manager增加主仓地址,将主仓地址代码pull到本地,pull的时候会报错冲突,在本地解决冲突,解决完冲突后,再修改commit信息提交代码到个人仓,最后合到主仓。

2024年8月2日17:49:24

最近还遇到一个问题,就是我最近要提交一次代码,但是这个提交一直没有改好,还涉及到pb文件的增加字段。在我修改的过程中pb文件还会被别人修改。所以我提交代码的时候总是发现远端pb文件更新了,所以我也要更新自己仓库的pb文件。所以出现这个情况,在我提交代码时,我需要拉取最新的远端代码,但是拉取远端代码又将别人的修改混在自己提交的代码中了。

我是这么处理的,直接拉取新的develop分支实现需求。master分支reset-hard到提交我代码之前的记录。然后执行git push -f。然后git pull元段代码,在git push最新的代码到废人仓库。这时候合并请求中没有提交记录,个人仓库的代码也是最新的。然后再基于个人分支最新代码实现需求。最后再提交。

这个还是茂盛的那个方法,避免将别人的代码和自己的代码混在一起。

十、报错 

1、报错1

warning: ----------------- SECURITY WARNING ----------------
warning: | TLS certificate verification has been disabled! |

百度查到这个帖子,TLS certificate verification has been disabled!-CSDN博客 

 

2、报错2

git.exe pull --progress -v --no-rebase "origin" master
remote: request-id 133273da20eedcc3ca8f743cf8280d17
remote: HTTP Basic: Access denied
fatal: Authentication failed for 'https:/xxx.com/xxx/xxx.git/'

 因为修改了密码,导致pull失败,修改密码就行。

参考:https://blog.csdn.net/jsjxb1987/article/details/131173389


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值