前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Git 总结

Git 总结

作者头像
yiyun
发布2022-04-01 13:45:32
发布2022-04-01 13:45:32
1.1K00
代码可运行
举报
文章被收录于专栏:yiyun 的专栏yiyun 的专栏
运行总次数:0
代码可运行

回退

git reset

代码语言:javascript
代码运行次数:0
运行
复制
# 回退到某commit, 仅回退commit信息,不会改变工作区任何文件(非常快,因为其实没有任何文件的改变)
# 如果你的改动没有 push 到远程,可以通过此方式,将直接改变 log 历史线
# 通过 git status 你将看到目标与现在的差异,改动了哪些文件,这些将处于缓存区,修改为你满意的后,就可commit,中间的commit将看起来没有存在过一样
git reset --soft
代码语言:javascript
代码运行次数:0
运行
复制
# 回退到某 commit, 真正的时光机,将伴随工作区所有文件的改动,本地工作区源码将彻底变为目标版本
git reset --hard
代码语言:javascript
代码运行次数:0
运行
复制
git reset --soft     # 跳转到指定版本、不还原缓存区、不还原工作区。

git reset            # 跳转到指定版本、还原缓存区、不还原工作区。

git reset —hard  	 跳转到指定版本、还原缓存区、还原工作区、。

git reset 和 git revert 区别

TODO: git reset 和 git revert 区别

tag

代码语言:javascript
代码运行次数:0
运行
复制
# 查看本地 tag
git tag
git tag -l
代码语言:javascript
代码运行次数:0
运行
复制
# 删除本地tag
git tag -d <tagname>
代码语言:javascript
代码运行次数:0
运行
复制
# 删除远端tag
git push origin --delete <tagname>

--delete 也可简写 -d

代码语言:javascript
代码运行次数:0
运行
复制
# 向远端推送本地tag
git push origin <tagname>
代码语言:javascript
代码运行次数:0
运行
复制
# 向远端推送本地所有tag
git push origin --tags

submodule

代码语言:javascript
代码运行次数:0
运行
复制
git submodule --help

git submodule 允许一个git仓库,作为另一个git仓库的子目录,并且保持父仓库和子仓库相互独立。

子模块 实例

修改 子模块 内容 后

Visual Studio Code GitLens

Visual Studio Git

进入子模块,并 add, 主项目 status 不受影响

情景1: 拥有对子模块远程仓库权限,直接修改子模块路径中的文件 本地开发调试子模块结束后, 进入子模块路径 add, commit, push, 然后主项目 git add 子模块路径,git commit

这时会发现 new commits, git add 即可

情景2: 子模块对应的远程仓库有更新,本地子模块内容过时 本地进入子模块路径,git pull 子模块更新,然后返回主项目根目录, git add 子模块路径, git commit

子模块实际上就是记录的一个 commit 引用,

代码语言:javascript
代码运行次数:0
运行
复制
# 添加子模块远程仓库引用,此时还没有对应的 commit
# 注意: 经过测试, 此步就会生成 .gitmodules, .git/config 中 submodule 信息
git submodule add <url> <path>
# 此时确定 commit 引用
# PS: git submodule init 的时候,从 .gitmodules 读取子模块信息,然后生成配置文件到 .git 里
git submodule init
# 从远程检出子模块代码, 即下载 commit 引用 对应的文件内容
git submodule update

这称为 子模块初始化

代码语言:javascript
代码运行次数:0
运行
复制
git submodule init
git submodule update

等同下方

代码语言:javascript
代码运行次数:0
运行
复制
git submodule update --init --recursive

添加子仓库

代码语言:javascript
代码运行次数:0
运行
复制
git submodule add <仓库地址> <本地路径>

其中,仓库地址是指子模块仓库地址,路径指将子模块放置在当前工程下的路径。 注意:路径不能以 / 结尾(会造成修改不生效)、不能是现有工程已有的目录(不能順利 Clone) 命令执行完成,会在当前工程根路径下生成一个名为“.gitmodules”的文件,其中记录了子模块的信息。添加完成以后,再将子模块所在的文件夹添加到工程中即可。

代码语言:javascript
代码运行次数:0
运行
复制
git submodule add git@github.com:yiyungent/PluginCore.git src/PluginCore

添加成功后,在父仓库根目录增加了.gitmodule文件。

.gitmodule

经过测试 , 生成的是 .gitmodules ,

代码语言:javascript
代码运行次数:0
运行
复制
git --version
git version 2.26.2.windows.1
代码语言:javascript
代码运行次数:0
运行
复制
cat .gitmodules

并且在父仓库的git 配置文件中加入了submodule段。

代码语言:javascript
代码运行次数:0
运行
复制
cat .git/config

检出(checkout)

克隆一个包含子仓库的仓库目录,并不会clone下子仓库的文件,只是会克隆下.gitmodule描述文件,需要进一步克隆子仓库文件。

代码语言:javascript
代码运行次数:0
运行
复制
// 初始化本地配置文件
$ git submodule init

// 检出父仓库列出的commit
$ git submodule update

或者是执行以下命令(该命令效果等同于上面两个命令):

代码语言:javascript
代码运行次数:0
运行
复制
git submodule update --init --recursive

即可将子模块内容下载下来后工程才不会缺少相应的文件。

更新

如果在本地修改子仓库,在主仓库 git status会显示子仓库有修改。

需要先在子仓库提交,然后再到主仓库提交代码。

删除子模块

1.使用vim编辑.gitmodules(vim .gitmodule), 删除对应要删除的submodule的行.

2.使用vim编辑.git/config,删除有对应要删除的submodule的行.

3.执行 git rm --cached {submodule_path}。

注意,路径不要加后面的“/”。 例如:你的submodule保存在 supports/libs/websocket/ 目录。 执行命令为: git rm --cached supports/libs/websocket

如果未按照上述步骤删除,可能残留在.git/modudles文件夹内。

clone 时 带上子模块

代码语言:javascript
代码运行次数:0
运行
复制
git clone --recursive git@github.com:yiyungent/OneTree.git

master 重命名为 main

代码语言:javascript
代码运行次数:0
运行
复制
git branch -m master main

推送到远端

代码语言:javascript
代码运行次数:0
运行
复制
git push -u origin main

删除旧的 master 分支

代码语言:javascript
代码运行次数:0
运行
复制
git push --delete origin master

修改本地 git init 默认分支

代码语言:javascript
代码运行次数:0
运行
复制
git config --global init.defaultBranch main

设置大小写敏感

发现有个文件没注意大小写,于是重命名了该文件,发现 git 没有识别这个更改,不能提交

解决方法:

查看git 的设置

代码语言:javascript
代码运行次数:0
运行
复制
git config --get core.ignorecase

发现默认是不区分大小的,因此当你修改了文件名 (或文件夹名) 的大小写后,git并不会认为你有修改

更改设置

代码语言:javascript
代码运行次数:0
运行
复制
git config core.ignorecase false

git subtree

参考:

GitHub

国内镜像加速地址

补充

git commit emoji 表情

Bad owner or permissions on /root/.ssh/config

当将 Windows 下 Git 配置 复制到 Linux 下后, git clone 报错

代码语言:javascript
代码运行次数:0
运行
复制
sudo chmod 600 /root/.ssh/config

补充:

代码语言:javascript
代码运行次数:0
运行
复制
chmod -R 600 /root/.ssh

补充: Git 配置文件

代码语言:javascript
代码运行次数:0
运行
复制
~/.gitconfig
~/.ssh/
~/.gnupg/

WARNING: UNPROTECTED PRIVATE KEY FILE!

代码语言:javascript
代码运行次数:0
运行
复制
Warning: Permanently added the RSA host key for IP address '192.30.255.112' to the list of known hosts.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for '/root/.ssh/id_rsa_yiyun' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/root/.ssh/id_rsa_yiyun": bad permissions
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
代码语言:javascript
代码运行次数:0
运行
复制
chmod -R 600 /root/.ssh

私钥文件不能允许其他人访问, 因此权限 777 不被允许, 建议 600

关于 submodule init 等

代码语言:javascript
代码运行次数:0
运行
复制
git submodule init
git submodule update

init 执行后, 注入 .git/config, 但原本本地仓库就有啊,难道 push 上去的没有此项? 难道 push 在 clone 后, 此项就没有了?

有了此项后 update 才有效

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-12-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 回退
    • git reset
    • git reset 和 git revert 区别
  • tag
  • submodule
    • 子模块 实例
    • 添加子仓库
    • 检出(checkout)
    • 更新
    • 删除子模块
    • clone 时 带上子模块
  • master 重命名为 main
    • 删除旧的 master 分支
    • 修改本地 git init 默认分支
  • 设置大小写敏感
  • git subtree
  • GitHub
    • 国内镜像加速地址
  • 补充
    • git commit emoji 表情
    • Bad owner or permissions on /root/.ssh/config
    • WARNING: UNPROTECTED PRIVATE KEY FILE!
    • 关于 submodule init 等
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档