提示:这个文档是用来整理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: 中文:本地有未提交文件(本地验证的修改确实没提交)。请提交修改文件。这边有两个方法,提交本地;或者拉取远程文件,这边拉取远程文件试试。 |
拉取后没反应,继续报相同的错,我勾选合并试试 |
还是不行,看来只能先提交本地记录了 |
但是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分支。
查看远程,实现创建分支并推送。
3、删除本地未push分支
1、使用命令`git branch`查看所有的本地分支
2、找到你想删除的分支,然后使用命令`git branch -d `进行删除。例如,如果你想删除名为”feature_branch”的分支,可以执行命令`git branch -d feature_branch`。
3. 如果分支有未合并的更改,Git会拒绝删除分支并给出警告。如果你确定要强制删除分支,可以使用命令`git branch -D `进行强制删除。例如,使用命令`git branch -D feature_branch`强制删除名为”feature_branch”的分支。
4. 如果你想删除远程分支,可以使用命令`git push origin –delete `。例如,使用命令`git push origin –delete feature_branch`删除名为”feature_branch”的远程分支。
请注意,删除分支是不可逆的操作,请谨慎操作,确保你没有删除重要的分支
2025年8月18日16:49:15
删除分支方法
删除了本地分支后,想继续删除远程分支,但是不能通过想当然的使用push将本地分支的删除情况同步到远端,应该使用git push origin --delete feature_branch。这个方法是copilot给的,实际上使用上述指令删除远端分支遇到了个问题
显示查看远端分支,git branch -r。查看本地分支是git branch;
远端有分支origin/develop,使用删除指令git push origin --delete origin/develop,但是报错error: unable to delete 'origin/develop': remote ref does not exist
查了发现是因为删除远端分支不是这样写分支名的,应该写成git push origin --delete develop;此时成功
修改本地分支名
开发代码在develop00上,开发完成后把其他分支全部删掉,只留develop00分支,并且删除完其他分之后,将develop00改成develop。
Git branch -m old_branch_name new_branch_name 修改本地分支名
重命名的是本地分支,远程分支不会自动同步。
如果你想让远程也使用新名称,需要:
删除旧的远程分支:git push origin --delete 旧分支名
推送新分支:git push origin 新分支名
如果其他人也在使用旧分支,他们需要手动切换或删除旧分支
实际操作如下,
远端出现的develop分支确实和develop00一致。
三、回退远程提交记录
tortoiseGit: git reset (选hard)
git bash: git push origin HEAD --force
2023年12月19日11:30:57
想删除远程仓库的两次提交记录,还是执行git bash: git push origin HEAD --force
但是报错:
设置方式不一样,大概是仓库不是一个仓库,查看自己的仓库,如图
直接删除分支保护,因为是fork下来的个人仓。
再次推送成功 !远程记录被删除。
不需要再push了,已经push过了
2024年8月17日09:44:07
reset后,实际一直用 git push -f。今天提交的分支是develop分支,不是master分支,没成功并提示
fatal: The upstream branch of your current branch does not match
the name of your current branch. To push to the upstream branch
on the remote, use
git push zhuyf HEAD:master
To push to the branch of the same name on the remote, use
git push zhuyf HEAD
看提示是上游分支和当前的develop分支不一样,应该使用提示的两种方法,我使用的是git push zhuyf HEAD,但是报错
error: failed to push some refs to
修改语句为:
git push -f zhuyf HEAD
成功回退。
四、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里面的几个选项。
---
2025年3月27日 14:54
将远程主仓别人新建的分支fork到个人远程仓,方法:git fetch
六、.gitignore
1、创建
1、windows上创建.gitignore失败
需要以这种方式实现,cmd命令 使用指令
copy NUL .gitignore
windows进入文件夹的方式:
cd /d xxx
xxx为路径
成功在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源码提交
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地址。
后面还验证了下,确实是这样。
7.2 远程仓某分支做了大的改动,删增了文件,git pull报冲突,远程仓和个人仓同步
背景
之前fork了远程仓,里面有个同事开发分支ldx。昨天他上传了新的代码,我今天需要在本地仓同步他的最新代码。选择git pull,选择远程仓origin,此时报冲突。
应该是远程仓删除了文件,本地仓还有这些文件,git不知道怎么处理,报冲突想让我处理。
但是目前我是想无脑将远程仓覆盖本地仓。查了copilot,方法如下
git stash:贮藏本地无意修改。
git pull:此时需要勾选选项。如下所示
分支选择远程分支。事实上如果按照默认勾选Create New Branch,会报本地已经有ldx分支。正确发放是取消Create New Branch勾选。然后候选Overwrite working tree changes。执行,本地成功有了远程仓库最新提交代码。
上面还是有点问题,就是我想将本地代码push到远程仓的时候,执行了push,但是远程仓还是没有最新的代码。
------
下面是另一种方法,首先是将远程仓完全覆盖本地仓。方法如下:
git sync
下面使用git bash
git fetch origin
git reset --hard origin/c
git push zhuyf zhuyf --force
执行完后fork的个人仓就有了远程仓的最新代码。
下面就是怎么将个人仓代码拉取到本地了。
方法是使用git sync,选择个人仓就行了。
上述过程是建立在远程仓有了很大的改动才需要这样操作。
八、分支间同步
原因:今天遇到的问题是,之前从主仓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最新的代码到废人仓库。这时候合并请求中没有提交记录,个人仓库的代码也是最新的。然后再基于个人分支最新代码实现需求。最后再提交。
这个还是茂盛的那个方法,避免将别人的代码和自己的代码混在一起。
9.1、多人开发分支相关
要实现一个需求,就是在远程仓的某一个分支develop_20240909,这个分支需要修改代码并合入到该分支上。目前现状就是我个人仓,没有这个分支。我本来想将远程仓库的代码pull到本地,再push到个人仓,再基于个人仓修改,合入到主仓develop_20240909。但是从主仓 git pull到本地后,再执行push到个人仓,但是看了下个人仓并没有这个分支,有点懵逼。我之前好像处理过这个问题。然后并没有成功,现在看起来好像跟我有个MR没有合入主仓有关吧。
问了茂盛,茂盛使用了git fetch。我这边叙述一下使用的过程。首先是使用对本地代码使用git fetch,选择fetch来源为远程仓库。执行完后本地就有develop_20240909分支了。在本地新建分支6.16.1.200,这个分支基于develop_20240909分支。然后本地就有一个基于develop_20240909的新分支6.16.1.200,代码是develop_20240909分支的,修改后提交到个人仓,再从个人仓合入到远程仓,完成。
9.2 将远程主仓的新分支同步到远程个人仓
远程主仓新建了develop_new分支,现在需要将远程的新分支同步到远程个人仓分支。
git pull——选择远程主仓——选择主仓需要同步的分支——OK。
切换分支
推送到个人仓分支。
将个人仓master分支上的修改合并到新分支上。
好像没成功,这边需要再了解一下。
4月9日14:50
自己代码和自己代码冲突了。因为两次同时开发需求,对同一文件做了修改,后面合入的代码和前面合入的代码冲突了。
这时候我先是将远端主仓代码pull到本地,解决冲突,但是commit时发现有很多其他提交记录。
按照之前的方法,我是会将个人仓回退到和主仓一样的节点。然后pull主仓的代码到本地,然后强制push到远程个人仓。这个过程中我为了避免强制push会被已经存在的mr合并记录检测到,我会关闭MR,实际上这是不需要的,这次验证过了。
另外关于解决冲突
Use text block from right before left。保留远端的,并把本地的放在后面。
十、报错
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失败,修改密码就行。
3、报错3
出现下面报错
解决方法:[git clone使用ssh报错: No supported authentication methods available(server sent: publickey) 的解决办法](https://blog.csdn.net/weixin_46256404/article/details/127865605)
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。