当前位置: 首页 > news >正文

我的 git 实战记录

我的 git 实战记录

1. 将本次提交追加到上一次提交

1.1. 情景描述

有些时候,我提交东西太勤快了,导致有部分内容没有提交上去。分为两种情况:

  1. 已经 push 远程仓库
  2. 还没有 push 到远程仓库

1.2. 已经 push到远程仓库

git add 提交修改的文件,就是下面的操作了

`git commit --amend`   # 修改上一次的提交
# 进入提交信息编辑界面
# 修改保存退出
# 推送 (本地分支:远程分支)
git push  origin master:master
# 如果推送不上去,就用这个命令
git push -f origin master:master

然后,我们就提交,有可能普通提交上不去,那么我们就强制提交。

1.3. 未 push 到远程仓库

先git add提交修改的文件,就是下面的操作了

git commit --amend     # 修改上一次的提交

# 进入提交信息编辑界面
# 修改保存退出

1.4. 参考博客

  • git 提交过的追加提交
  • git commit --amend

2. git upstream

2.1. 情景描述

在一些提交的时候,我们需要提交到 upstrem,这个时候我们就需要知道什么是 upstream.
有时候一些提交需要我们提交到 upstream.

那我们要了解 orgin 和 upstream

2.2. orgin

在使用过程中经常可以看到origin这个名词,origin(原点)这次词是从哪来的呢?
要查看当前配置有哪些远程仓库,可以用git remote命令,它会列出每个远程库的简短名字。在克隆完某个项目后,至少可以看到一个名为 origin 的远程库,git 默认使用这个名字来标识你所克隆的原始仓库。
这就是 origin 的由来,如果是克隆了一个仓库,此命令会自动将远程仓库归于 origin 这个标识名下。

upstream

upstream 这个名词是在github的Fork功能上衍生出来的。
对于一些有名的开源项目(这里我选的是spring-framework项目),我们常常会把把这些项目Fork到自己的github上,然后再从自己的github把这个项目clone到本地,这时用git remote -v命令查看一下远程仓库的情况,可以看到:

$ git remote -v
origin  https://github.com/Flamingo93/spring-framework.git (fetch)
origin  https://github.com/Flamingo93/spring-framework.git (push)
upstream        https://github.com/spring-projects/spring-framework.git (fetch)
upstream        https://github.com/spring-projects/spring-framework.git (push)

从输出可以看出upstream与origin是并列的关系,他们都是远程仓库的名字,只不过origin是你所克隆的原始仓库的默认名字,upstream是fork的原项目的远程仓库的默认名字。

在这里插入图片描述

可以用git fetch [remote-name]命令从远程仓库抓取数据到本地:

$ git fetch origin        #抓取在你的GitHub仓库上新的提交数据到本地仓库
$ git fetch upstream        #抓取在著名开源项目的GitHub仓库上新的提交数据到本地仓库

3. git submodule

3.1. 添加当前submodule

使用https 格式,不要使用ssh格式

git submodule add https://github.com/username/repository

我们添加的module可以在 .git/modules 里面看到。

3.2. 删除submodule

git rm --cached <submodule path>

3.3 当我克隆远程仓库,更新我的submodule

当我一开始克隆了我以前的远称仓库,我就遇到一些问题就是git submodule update没有用
那么是为什么呢?

我发现是我里面用的 git 远程格式是 ssh 格式,我也不知道为啥,反正改成 https 就好了。

然后我们就要修复git submodule 里面的路径,让我们打开文件 vim .gitmodules

git submodule init && git submodule update

下面的<path>是这个远程相对于.git 的路径。

[submodule <path>]
	path = <path>
	url = <remote_repository_url>

而且我们还要删除一些我们已经错误的submodule
就用 git rm --cached <submodule_path>

git submodule sync
然后我们就用 git submodule update –init 来跟据.gitmodule来更新submodule.
ok,解决问题!!!

github克隆项目中的子模块submodule时遇到的问题

4. 当我们 fork 了一个项目,在本地修改,想提交进入自己的 fork 仓库

一般我们还在原仓库进行修改,那么我们推送上去的还是原仓库,那么我们想要推送进自己的仓库,那么我们就需要修改 git remote

使用 git remote -v

$ git remote -v
origin  git@github.com:looniink/hotelManage.git (fetch)
origin  git@github.com:looniink/hotelManage.git (push)

然后,我fork的 orgin 是:

  • git@github.com:Leiyi548/hotelManage.git(fetech)
  • git@github.com:Leiyi548/hotelManage.git(push)

然后修改

方法一、直接修改:

git remote set-url origin git@github.com:Leiyi548/hotelManage.git

方法二、删除再修改:

git remote rm origin
git remote add origin git@github.com:Leiyi548/hotelManage.git

修改好了,我们就能直接 git push

5. 本地建立了新分支,推送到远程去

  • 使用 git branch 查看本地分支:
$ git brach
* coc
main

可以看到我们本地分支这里有两个分支,一个是 coc,一个是 main分支,当前我处于coc分支。

  • 使用 git branch -r 查看远程分支:
$ git branch -r
origin/HEAD -> origin/main
origin/mainB
  • 使用 git branch -a 查看所有分支:
$ git branch -a
* coc
main 
remotes/origin/HEAD -> origin/main
remotes/origin/coc
remotes/origin/main

将新建立的 coc 分支推送到远端

git push origin coc

然后我们去远程仓库,看coc就推送上去了。

在这里插入图片描述

6. git 提交文件大于100mb

有些时候,我会用git来提交东西,有时候,我提交的东西过大,那么我就无法提交……

解决这个问题,运行如下命令即可:

使用Git LFS

  1. 在官网 https://git-lfs.github.com/下载 git-lfs-windows-v2.8.0.exe 并安装。
  2. 新开一个bash命令行输入git lfs install安装
  3. 跟踪你要push的大文件git lfs track "/path/filename",这时会生成一个.gitattributes文件。
  4. 这里很重要,一定要先将上一步生成的.gitattributes文件上传到仓库也就是要上传三部曲

然后我们再运行 git push,就可以了。

更详细的信息请看解决GitHub上传大于100M文件失败

在 windows 使用 wsl2 操作 git

如果您在Windows、WSL 或容器之间使用相同的存放库资料夹,请务必设定一致的行尾。

由于Windows和 Linux 使用不同的预设行尾端,Git 可能会报告大量修改过的档桉,除了其行尾端之外没有差异。 若要避免发生这种情况,您可以使用档桉或在Windows端全域停用行结束转换 .gitattributes 。 请参阅此VS Code文档,以解决 Git 行结尾问题。

那么我们在我们的项目的根目录创建一个 .gitattribute,因为这个文件对其他人也有用!

* text=auto eol=lf
*.{cmd,[cC][mM][dD]} text eol=crlf
*.{bat,[bB][aA][tT]} text eol=crlf

上面的设置含义是:
将会让所有都以 lf 来进行换行,除了windows的特定文件

7. 参考博客

  • origin vs upstream - Git名词解释
  • 解决GitHub上传大于100M文件失败

相关文章:

  • MongoTemplate 操作 Mongo的字段中List元素
  • Maix Bit(K210)保姆级入门上手教程---外设基本使用
  • 实时即未来,大数据项目车联网之Flink Watermark(水位线)【十四】
  • 好看的滤镜怎么调?来看看今日的分享
  • AppScan介绍和安装
  • 1.13笔记
  • Elasticsearch连续剧之分词器
  • 实战Kaggle比赛:预测房价
  • 力扣 2287. 重排字符形成目标字符串
  • 22年终总结
  • [LeetCode周赛复盘] 第 328 场周赛20230115
  • Dubbo 服务暴露
  • 电商云仓是如何包装发货的?
  • 23种设计模式(三)——观察者模式【组件协作】
  • 互联网中断检测技术窥览与讨论
  • 大数据技术架构(组件)——Hive:环境准备2
  • 【原生Button和antd的Button】
  • 力扣(131.93)补9.21
  • react基础Day04-React原理揭秘React路由基础
  • excel函数技巧:函数TEXT七助数据大变身