学习git-bash的网站
git初始化本地仓库和基本操作
|
|
.gitmodules 内容展示
|
|
推送和拉取
推送
push -u | 推送到远程分支时与远程分支内容合并 |
push -f | 推送到远程分支时与覆盖远程分支内容 |
|
|
拉取
pull | 拉取远程分支内容 |
|
|
git fatal: 拒绝合并无关的历史的错误解决方法
|
|
git pull 命令时出现了冲突
这通常是因为远程仓库和本地仓库的历史记录不一致导致的。
- 执行 git status 命令查看当前的状态,确认哪些文件存在冲突。
- 手动编辑冲突的文件,解决冲突。冲突通常会被标记为类似以下内容的标记:
|
|
您需要手动选择保留哪些代码,并删除冲突标记,直到文件中所有的冲突都得到解决。
- 解决冲突后,执行 git add <冲突文件> 将已解决冲突的文件标记为已解决。
- 最后执行 git commit 提交解决冲突后的修改。
【Git】 如何将一个分支的某个提交合并到另一个分支
在使用 Git 进行版本控制时,常常会遇到这样的需求:将某个分支的特定提交合并到另一个分支中。这种情况下,我们可以使用 cherry-pick 命令来实现。本文将详细介绍 cherry-pick 命令的使用方法,并介绍一些 cherry-pick 的高级用法。
什么是 git cherry-pick
git cherry-pick 命令可以将某个分支上的特定提交应用到当前分支上。与 merge 或 rebase 不同,cherry-pick 只关注指定的提交,而不处理整个分支的变更历史。
基本用法
以下是使用 git cherry-pick 将一个分支的某个提交合并到另一个分支的具体步骤:
切换到目标分支
首先,切换到你希望将提交合并到的目标分支。
|
|
例如,如果目标分支是 main,则执行:
|
|
找到提交的哈希值
在源分支中找到你想要合并的那个提交的哈希值(SHA-1)。你可以通过以下命令查看提交日志:
|
|
例如:
|
|
找到你需要的提交的哈希值,例如 abc123。
Cherry-pick 提交
使用 cherry-pick 命令将该提交合并到当前分支。
|
|
例如:
|
|
解决冲突
在 cherry-pick 过程中可能会遇到冲突。此时需要手动解决冲突,然后继续 cherry-pick 过程。
解决冲突后,添加解决冲突后的文件:
git add 解决冲突后的文件
继续 cherry-pick 过程:
|
|
如果想要放弃这次 cherry-pick,可以使用以下命令:
|
|
cherry-pick 的其他用法
合并多个提交
如果需要一次性合并多个提交,可以在 cherry-pick 后面指定多个提交的哈希值:
|
|
也可以使用提交范围:
|
|
编辑提交信息
在 cherry-pick 的时候,可以使用 -e 选项来编辑提交信息:
|
|
保留提交信息
使用 -x 选项可以在提交信息中加入原始提交的引用信息,方便追溯:
|
|
忽略空提交
使用 –skip 选项可以跳过空的提交(即已经应用的变更):
|
|
总结一下
git cherry-pick 是一个非常有用的命令,可以帮助我们将特定的提交从一个分支应用到另一个分支。在使用过程中,遇到冲突时需要手动解决,并可以利用一些高级选项来增强 cherry-pick 的功能。通过掌握这些技巧,能够更灵活地管理项目的版本控制。
查看和删除分支
|
|
修改远程仓库地址
方法1
|
|
方法2(先删后加)
|
|
方法3(直接修改配置文件)
|
|
Git 仓库的远程列表
查看远程列表
要查看 Git 仓库的远程列表,我们可以使用 git remote 命令。这个命令会列出所有远程仓库的名称。
|
|
如果仓库有多个远程仓库,我们可以使用 -v 选项查看更详细的信息,包括每个远程仓库的 URL。
|
|
参考链接
构建github代码文件链接的方法
|
|
其他操作
|
|
参考链接
https://blog.csdn.net/xiaoxgongzs/article/details/105099281
要将一个 Git 仓库作为子模块添加到另一个 Git 仓库中,你可以按照以下步骤操作:
- 在父项目中初始化子模块: 在父项目的根目录下打开命令行或终端,并执行以下命令:
|
|
例如:
|
|
这将把 hugo-theme-stack 作为子模块添加到 themes/hugo-theme-stack 路径中。
- 提交更新: 添加子模块后,父项目会有一些变动,需要提交到版本控制系统中:
|
|
- 初始化子模块(如果有必要): 在父项目的根目录下执行以下命令来初始化子模块:
|
|
这会将子模块的代码拉取到本地,使得父项目能够使用它。
- 提交更新: 如果你初始化了子模块,那么子模块的代码也会被拉取到本地,需要将这些变动提交到版本控制系统中:
|
|
- 推送更新(可选): 如果需要,将父项目的更新推送到远程仓库:
|
|
以上步骤将会在父项目中成功添加一个子模块。在执行这些步骤之前,请确保你对子模块的路径和远程仓库地址有正确的了解,并且你有权限访问这些仓库。
子模块索引过,如何再次索引
如果你已经删除了相关的索引文件(比如.gitmodules文件)并且配置文件中也不包含索引信息,但仍然无法添加子模块,可能是由于Git仓库中还存在一些缓存或其他问题导致的。
你可以尝试以下步骤来清除可能导致无法添加子模块的问题:
-
**清除子模块缓存**:
1
git rm --cached hugo1/themes/hugo-theme-stack
-
**删除子模块目录**:
1
rm -rf hugo1/themes/hugo-theme-stack
-
**提交更改**:
1 2 3
git add . git commit -m "Remove submodule hugo-theme-stack" git push
完成以上步骤后,你可以尝试重新添加子模块:
|
|
以上步骤来源于 chatgpt,而我实际操作的时候只执行了第一步,即清除子模块缓存,然后执行最后一步,即重新添加子模块
Git 如何解决从GitHub克隆仓库时出现的SSL证书自签名问题
解决方案
在解决SSL证书自签名问题前,我们先要了解一下Git配置中和SSL有关的几个关键属性:
- http.sslVerify:该属性用于指定是否验证SSL证书,默认值为true,表示验证证书。
- http.sslCAInfo:该属性用于指定SSL证书的位置,提供自定义的CA证书进行验证。
- http.sslCAPath:该属性用于指定SSL证书的路径,提供自定义的CA证书进行验证。
方案一:忽略SSL证书验证
当您确定从GitHub上克隆仓库的过程中,SSL证书问题不会对仓库的安全性产生威胁时,您可以选择忽略SSL证书验证。在使用Git命令进行克隆操作时,可以添加-c选项,并指定http.sslVerify=false参数
操作方式
|
|
通过设置http.sslVerify为false,Git会跳过证书验证,并将通信与GitHub建立起来。
使用实例
|
|
git reset –hard
git reset –hard 是一个Git命令,其作用是将当前的工作目录和索引(即暂存区)都重置为指定的提交(commit),并且丢弃所有未提交的修改。
具体来说,它的作用如下:
- 重置工作目录和暂存区: 使用 –hard 选项会将工作目录和暂存区完全重置为指定的提交状态。这意味着当前的工作目录中的所有未提交的修改都会被删除,包括未添加到暂存区的文件修改和已经添加到暂存区但未提交的更改。
- 丢弃所有本地修改: 如果你在工作目录中进行了一些修改(比如编辑文件、添加新文件等),但是还没有提交这些更改,运行 git reset –hard 将会丢弃所有这些修改,使工作目录变成指定提交的状态。
- 慎重使用: 由于 git reset –hard 会永久丢弃所有未提交的工作,因此在使用时需要特别小心。确保你真的希望丢弃所有本地修改并将工作目录恢复到指定提交的状态。
总之,git reset –hard 是一个强制性的命令,可以帮助你彻底清理和重置本地工作目录和暂存区,回到指定提交的状态。
在 Git 中,reset 和 –hard 是两个不同的命令和选项,它们分别具有以下作用:
- git reset
git reset 命令用于将当前分支的 HEAD 指针重置为指定的状态,并且可以选择是否更新暂存区和工作目录。
- 作用: 主要用于撤销提交、重置当前分支的位置或者在不同的模式之间切换。
-
常见用法:
- git reset <commit>:将当前分支的 HEAD 指针移动到 <commit>,并且不更改暂存区和工作目录。这个命令通常用于撤销提交或者移动到不同的提交上。
- git reset –soft <commit>:将 HEAD 指针移动到 <commit>,并且保留暂存区和工作目录的更改。这个命令通常用于撤销最近的一次提交,并且保留更改以便重新提交。
- git reset –mixed <commit>(默认行为):将 HEAD 指针移动到 <commit>,并且重置暂存区,但是保留工作目录的更改。这个命令通常用于取消暂存的更改或者将暂存区和工作目录的状态与指定提交保持一致。
- git reset –hard <commit>:将 HEAD 指针移动到 <commit>,并且重置暂存区和工作目录,使它们与指定提交完全一致。这个命令通常用于彻底清理工作目录并重置到指定的提交状态。
- –hard 选项
–hard 是 git reset 命令的一个选项,用于指定重置的模式之一。它的作用是:
- 作用: 在执行 git reset 时,–hard 选项会重置当前分支的 HEAD 指针,并且彻底重置暂存区和工作目录,使它们与指定的提交完全一致。
- 注意事项: 使用 git reset –hard 时要非常小心,因为它会永久删除未提交的工作目录中的所有更改。任何未提交的更改都将被彻底清除。
综上所述,git reset 是一个多功能命令,可以用来移动 HEAD 指针和管理暂存区、工作目录的状态。而 –hard 是 git reset 命令的一种选项,用于彻底重置工作目录和暂存区,以使它们与指定的提交完全一致。
git reset 命令在 Git 中有三种常见的重置模式,它们是:
-
–soft 模式:
- git reset –soft <commit>:在这种模式下,Git 会将 HEAD 指针移动到 <commit>,但是不会重置暂存区和工作目录。这意味着所有的更改都会保留在工作目录中,并且保留在暂存区,因此你可以随时使用 git commit 命令来提交这些更改。
- 典型用途:用于取消上一次提交,并将更改保留在工作目录和暂存区,以便进一步调整或重新提交。
-
–mixed 模式:
- git reset –mixed <commit> 或 git reset <commit>(默认模式):这种模式是 git reset 的默认行为。在这种模式下,Git 会将 HEAD 指针移动到 <commit>,同时重置暂存区的状态,但是保留工作目录中的更改。
- 典型用途:用于取消暂存的更改,或者将暂存区和工作目录的状态与指定的提交保持一致。
-
–hard 模式:
- git reset –hard <commit>:这是最强制的重置模式。在这种模式下,Git 会将 HEAD 指针移动到 <commit>,并且彻底重置暂存区和工作目录,使它们与指定的提交完全一致。
- 典型用途:用于完全丢弃工作目录中的所有未提交更改,并将工作目录恢复到指定提交的状态。
这些模式允许你根据需要选择不同级别的重置操作。在选择使用 –soft、–mixed 或 –hard 时,务必注意其影响范围,以免意外丢失或保留不必要的更改。
Git在检出代码时遇到了问题,可能是由于网络问题或Git版本不兼容
异常现象
|
|
解决方式
|
|
github的一些快捷键和在线编辑器
github的一些常用快捷键
按键 | 说明 |
---|---|
s | 跳转到搜索框 |
t | 用于仓库内的文件搜索 |
l | 在仓库文件显示页,键入l后在弹处窗口输入行号,表示跳转到该文件的指定行 |
b | 查看文件改动进度 |
ctrl+k | 快速定位查看内容模块 |
. | 进入在线编辑器模式 |
GitHub 看代码神器
- 只需将github网页地址中github.com改为github1s.com (增加的字符是123的"1"和"s")
- GitHub 官方出的 Online VSCode 编辑器:输入.键(句号键),相当于把仓库地址中github.com改为github.dev
|
|
- 地址前加上 (https://) gitpod.io/#/,,即把地址中gihub.com改为gitpod.io/#/github.com,直接进入gitpod。
|
|
参考链接
Git 如何使用一条命令来获取Git根目录
在本文中,我们将介绍如何使用一条命令来获取Git根目录。在Git中,根目录是指包含.git文件夹的顶级目录,它是整个Git仓库的起始点。
使用git rev-parse命令获取Git根目录
Git提供了一个名为git rev-parse的命令,可以用来解析、处理Git对象以及获取与之相关的信息。通过使用git rev-parse命令,我们可以获取Git根目录的绝对路径。
要获取Git根目录的绝对路径,可以在命令行中输入以下命令:
|
|
这将返回Git根目录的绝对路径。例如,假设我们的Git仓库位于/Users/username/git-repo目录中,那么以上命令将返回/Users/username/git-repo。你可以在自己的Git仓库中尝试该命令,看看它是否返回了正确的根目录路径。
示例
让我们通过一个示例来进一步说明如何使用git rev-parse命令获取Git根目录。
首先,我们在命令行中切换到我们的Git仓库所在的目录。
|
|
接下来,我们可以使用git rev-parse –show-toplevel命令来获取Git根目录的路径。
|
|
结果将会显示Git根目录的绝对路径。
|
|
通过执行以上命令,我们成功地获取了Git根目录的路径。
其他方法
除了使用git rev-parse命令之外,还有一些其他方法可以获取Git根目录的路径。这些方法可能更简洁或更适合特定的情况,但可能不如git rev-parse命令灵活。
使用git rev-parse –show-cdup命令可以返回到Git根目录所需的相对路径。 使用git rev-parse –git-dir命令可以返回相对于当前目录的.git文件夹的路径。
在Git的钩子脚本中,可以使用git rev-parse命令获取Git根目录以及其他相关信息,用于自定义的处理逻辑。
请注意,使用这些方法时需要切换到Git仓库所在的目录。
总结
通过使用git rev-parse命令,我们可以方便地获取Git根目录的路径。该命令对于构建自定义的Git工具或在Git钩子脚本中进行自定义处理非常有用。除了git rev-parse命令之外,还有一些其他方法可以获取Git根目录的路径,但可能不如git rev-parse命令灵活。希望本文对你理解如何获取Git根目录有所帮助。
我的push与pull脚本
push脚本
upload.sh
|
|
pull脚本
pull.sh
|
|
强制push脚本
force_upload.sh
|
|
强制pull脚本
force_pull.sh
|
|
将脚本整合到一起
git_push_pull.sh
|
|
在执行 git pull 操作时,本地的某些文件发生了修改,而这些修改未被提交。git pull 操作会试图将远程分支的更改合并到本地分支,但这会导致你本地的修改被覆盖,从而产生了冲突
为了解决这个问题,你可以采取以下几种方法之一:
1. 提交本地更改
如果你希望保留你本地的修改,最简单的做法是先将本地更改提交,再进行合并操作。步骤如下:
|
|
2. 暂存本地更改
如果你暂时不想提交本地更改,可以使用 git stash 来存储本地更改,再进行拉取操作。步骤如下:
|
|
3. 丢弃本地更改
如果你确定不需要保留本地的更改,可以直接丢弃这些修改。步骤如下:
|
|
选择合适的方式取决于你是否需要保留本地的修改。如果你不确定如何操作,可以先用 git status 查看当前本地的修改情况,然后决定是否提交、暂存或丢弃这些修改。
当前分支 Master 没有对应的上游分支
为推送当前分支并建立与远程上游的跟踪,使用:
|
|