教程

PPT-lec2 - 2023 秋冬实用技能拾遗 (tonycrane.cc)

B 站视频

ChatGpt 对话

在命令行中提交代码,通常是使用 Git 命令进行操作。以下是提交代码的基本步骤:

  1. 打开命令行终端(如 Git Bash、Terminal 等)。

  2. 进入你的代码仓库所在的目录,使用 cd 命令切换到对应的目录。

  3. 使用 git status 命令查看当前代码的状态,确保没有未提交的更改。

  4. 如果有未提交的更改,使用 git add . 命令将所有更改添加到暂存区。

  5. 使用 git commit -m "commit message" 命令提交代码,其中 "commit message" 是你的提交信息,描述本次提交的内容。

  6. 最后使用 git push 指令将本地提交推送到远程仓库。

以上是提交代码的基本步骤,在实际操作中可能会根据具体情况有所不同。如果在提交代码过程中遇到问题,可以查看 Git 的官方文档或者在命令行中使用 git help 命令查看帮助信息。

这个错误提示表明当前分支(main)没有与远程仓库关联的上游分支。你可以按照提示中的建议使用 git push --set-upstream origin main 命令将当前分支与远程仓库的主分支关联起来。这样一旦关联后,你就可以使用 git push 命令来推送代码到远程仓库。

具体步骤如下:

  1. 运行命令 git push --set-upstream origin main,这会将当前分支(main)与远程仓库的主分支关联。

  2. 接下来,你可以使用 git push 命令来推送代码到远程仓库,而不需要再次指定远程分支。

如果你希望将当前分支(main)作为默认推送的分支,可以在 Git 配置中设置 push.default 选项。可以通过运行 git config --global push.default current 来设置当前分支为默认推送分支。

PS D:\MyCode\VSCode> git remote -v master https://github.com/0zxm/VScode.git (fetch) master https://github.com/0zxm/VScode.git (push)

GPT-3.5 Turbo

根据你提供的输出结果,可以看到你的本地 Git 仓库已经正确地与远程仓库关联。远程仓库的名称是 master,远程仓库的 URL 是 https://github.com/0zxm/VScode.git,并且已经设置了 fetch 和 push 的地址。

既然已经正确地设置了远程仓库,但是在执行 git push 命令时仍然出现了错误,可能是由于其他原因导致的。你可以尝试以下几种方法来解决问题:

  1. 确保你有写入权限:请确保你对远程仓库有写入权限,如果是一个私有仓库,可能需要提供认证信息。
  2. 检查网络连接:确保你的网络连接正常,能够访问远程仓库。
  3. 检查分支名称:确保你当前在正确的分支上,并且使用正确的分支名称进行推送。
  4. 尝试强制推送:如果你确定你要覆盖远程仓库的内容,可以尝试使用 git push -f 命令来强制推送。

如果以上方法仍然无法解决问题,可能需要更详细地检查错误信息或者尝试其他方法。你也可以提供更多关于错误的详细信息,以便更好地帮助你解决问题。

You

怎么在仓库创建分支

GPT-3.5 Turbo

要在 Git 仓库中创建一个新的分支,可以按照以下步骤进行:

  1. 确保你已经在本地 Git 仓库的主分支(通常是 mastermain)上,并且工作目录是干净的(没有未提交的更改)。

  2. 打开命令行或终端,并切换到你的本地 Git 仓库目录。

  3. 使用以下命令创建并切换到新的分支:

    git checkout -b <branch_name>

    这个命令会创建一个名为 <branch_name> 的新分支,并将你的工作目录切换到这个新分支上。

  4. 如果你想将新分支推送到远程仓库,可以使用以下命令:

    git push origin <branch_name>

    这个命令会将新分支推送到远程仓库中,并在远程仓库上创建一个同名的分支。

  5. 如果你只是想在本地创建一个新分支,而不需要将其推送到远程仓库,可以简单地使用以下命令:

    git branch <branch_name>

    这个命令会在本地创建一个名为 <branch_name> 的新分支,但不会切换到这个分支上。

通过以上步骤,你就可以在 Git 仓库中成功地创建一个新的分支了。记得在新分支上进行开发或修改,然后根据需要将其合并回主分支或其他分支。

You

fatal: unable to access ‘https://github.com/0zxm/VScode.git/‘: HTTP/2 stream 1 was not closed cleanly before end of the underlying stream

GPT-3.5 Turbo

这个错误提示表明在 Git 操作中出现了 HTTP/2 流未正确关闭的问题。这可能是由于网络连接或 Git 配置问题引起的。以下是一些可能的解决方法:

  1. 尝试使用 SSH 协议: 有时候使用 SSH 协议而不是 HTTPS 协议可以解决一些网络相关的问题。你可以将远程仓库的 URL 从 HTTPS 切换为 SSH,然后尝试执行 Git 操作。
  2. 更新 Git 版本: 有时候旧版本的 Git 可能会出现一些问题,尝试更新到最新版本的 Git 可能会解决一些问题。
  3. 检查网络连接: 确保你的网络连接稳定,尝试使用其他网络环境或者重启网络设备。
  4. 检查代理设置: 如果你正在使用代理服务器访问网络,可能会导致一些问题,尝试检查代理设置或者暂时禁用代理。
  5. 尝试清除 Git 缓存: 有时候 Git 缓存中的一些问题可能导致错误,尝试清除 Git 的缓存并重新执行 Git 操作。
  6. 联系 GitHub 支持: 如果以上方法都无法解决问题,可能需要联系 GitHub 的支持团队寻求帮助,他们可能会提供更详细的解决方案。

尝试以上方法中的一个或多个,看看是否能够解决你遇到的问题。如果问题仍然存在,请提供更多详细信息,以便更好地帮助你解决。

You

更新 Git 版本: 有时候旧版本的 Git 可能会出现一些问题,尝试更新到最新版本的 Git 可能会解决一些问题和尝试清除 Git 缓存: 有时候 Git 缓存中的一些问题可能导致错误,尝试清除 Git 的缓存并重新执行 Git 操作。 具体是怎么样的

GPT-3.5 Turbo

更新 Git 版本和清除 Git 缓存是两个独立的操作。以下是针对这两个操作的具体步骤:

更新 Git 版本:

  1. 检查当前 Git 版本: 在命令行中输入以下命令可以查看当前安装的 Git 版本:

    git --version
  2. 下载最新版本的 Git: 访问 Git 官方网站(https://git-scm.com/)下载最新版本的 Git 安装程序,并按照安装指南进行安装。

  3. 更新 Git 版本: 安装完成后,可以再次输入以下命令检查 Git 版本,确认已成功更新:

    git --version

清除 Git 缓存:

  1. 清除 Git 缓存: 在命令行中输入以下命令可以清除 Git 的缓存:

    git clean -xdf

    这个命令会清除未跟踪文件和目录,-x 选项表示同时删除忽略的文件,-d 选项表示同时删除未跟踪的目录,-f 选项表示强制执行清除操作。

  2. 重新执行 Git 操作: 清除完 Git 缓存后,可以尝试重新执行之前的 Git 操作,看看问题是否得到解决。

通过以上步骤,你可以更新 Git 版本和清除 Git 缓存,希望能够帮助你解决遇到的问题。如果问题仍然存在或者有任何疑问,请随时告诉我。

You

fatal: not a git repository (or any of the parent directories): .git

GPT-3.5 Turbo

这个错误提示表明当前目录或其父目录中不存在 Git 仓库。Git 需要在一个包含 .git 目录的目录中才能执行 Git 命令。以下是一些可能导致这个错误的原因以及解决方法:

  1. 检查当前目录: 确保你在包含 Git 仓库的目录中执行 Git 命令。你可以使用 ls -a 命令查看当前目录中是否包含 .git 目录。
  2. 检查父目录: 如果当前目录中不包含 .git 目录,可以尝试进入父目录查看是否存在 Git 仓库。你可以使用 cd .. 命令进入父目录,然后再次执行 Git 命令。
  3. 初始化 Git 仓库: 如果当前目录或其父目录中都没有 Git 仓库,你可以使用 git init 命令在当前目录初始化一个新的 Git 仓库。这将创建一个 .git 目录并将当前目录标记为 Git 仓库。
  4. 查找正确的 Git 仓库: 如果你是在错误的目录中执行 Git 命令,可以使用 cd 命令切换到包含正确 Git 仓库的目录,然后再次执行 Git 命令。

请根据以上步骤检查当前目录和父目录中是否存在 Git 仓库,并确保在正确的目录中执行 Git 命令。如果问题仍然存在或者有任何疑问,请随时告诉我。

git 怎么添加 ignore 文件

GPT-3.5 Turbo

要添加一个 ignore 文件,可以按照以下步骤操作:

  1. 在项目的根目录下创建一个名为.gitignore的文件。
  2. 打开.gitignore文件,并在其中列出你希望 Git 忽略的文件或文件夹,每一行代表一个文件或文件夹。
  3. 保存.gitignore文件。
  4. .gitignore文件添加到 Git 仓库中,使用以下命令:
git add .gitignore
  1. 提交更改到 Git 仓库,使用以下命令:
git commit -m "Add .gitignore file"

这样,Git 就会开始忽略在.gitignore文件中列出的文件或文件夹,不会将它们包含在版本控制中。

Ask GPT-4 Turbo

在你提供的输出中,git commit 命令提示你输入一个提交信息来描述你所做的更改。同时,它也显示了你当前所在的分支(main)以及该分支与远程仓库(origin/main)的同步状态。此外,它还列出了即将被提交的更改,这些更改包括一个被修改的文件,但该文件的名字看起来像是由于编码问题而出现了乱码。

文件名中出现的乱码可能是由于该文件名包含了一些非 ASCII 字符,而这些字符在你的终端或命令行界面中没有被正确显示。这通常是由于字符编码设置不匹配或不支持某些字符集造成的。

为了解决这个问题,你可以尝试以下几个步骤:

  1. 检查文件名的实际字符:首先,确认文件名的实际字符是什么。你可以使用文件浏览器或图形界面工具来查看文件名,或者使用支持相应字符编码的终端来列出文件。
  2. 修改文件名:如果可能的话,将文件名修改为只包含 ASCII 字符或你的系统支持的字符集。这可以避免在命令行界面中出现乱码。
  3. 设置正确的字符编码:确保你的终端或命令行界面使用了正确的字符编码。在 Linux 和 macOS 上,通常是 UTF-8。在 Windows 上,可能是 GBK 或其他编码,但 UTF-8 也是一个常见的选择。你可以检查并修改终端的字符编码设置。
  4. 使用 Git 的配置:Git 也允许你设置用于文件名和日志消息的字符编码。你可以通过运行以下命令来设置 Git 的字符编码为 UTF-8(或其他你选择的编码):
git config --global i18n.commitencoding utf-8
git config --global i18n.logoutputencoding utf-8

这些设置会影响 Git 如何解释和显示文件名和提交信息。

  1. 重新提交:在解决了文件名乱码问题后,你可以再次运行git commit命令并输入一个有意义的提交信息来完成提交。

请注意,乱码问题可能还涉及其他因素,如操作系统的语言设置、终端模拟器的设置等。如果上述步骤没有解决问题,你可能需要进一步检查这些设置或寻求更具体的帮助。

要彻底删除一个分支,你需要执行两个步骤:首先删除本地分支,然后删除远程分支。

删除本地分支的命令是 git branch -d <local_branch>,其中 是你要删除的本地分支的名称。请注意,如果分支包含未合并的更改和未推送的提交,那么这个命令可能无法删除分支。在这种情况下,你可以使用 git branch -D <local_branch> 命令来强制删除分支。

删除远程分支的命令是 git push origin --delete <remote_branch>,其中 是你要删除的远程分支的名称。这个命令会将删除操作推送到远程仓库,从而彻底删除分支。

如果你想要一次性删除本地和远程分支,可以使用 git push origin --delete <local_branch> 命令。这个命令会先删除本地分支,然后将删除操作推送到远程仓库,从而彻底删除分支。

请注意,在删除分支之前,最好先确认分支是否已经被合并,并且确保没有其他人在使用该分支。否则,删除分支可能会导致数据丢失或者影响其他人的工作。

SSH 安全外壳协议

概念

SSH 全称 secure shell,安全外壳协议(安全的 shell),是一个计算机网络协议(默认端口号为 22)。通过 ssh 协议可以在客户端安全(提供身份认证、信息加密)的远程连接Linux 服务器或其他设备。

使用广泛的 Xshell 软件就是基于 SSH 协议远程连接。

  • SSH 远程连接之后能干什么?
    • SSH 远程连接之后,就可以像操作本地的机器一样操作远程机器。当需要操控的机器不在本地时就可以使用 ssh 协议远程连接操控。

相关链接 blog

使用

ssh-keygen -t rsa -b 4096 -C "密钥名称"

  • -t rsa:指定生成 RSA 类型的密钥。
  • -b 4096:指定密钥的位数为 4096 位,这是 RSA 密钥的常用长度,提供较高的安全性。
  • -C "密钥名称":为密钥添加一个注释(通常是你的电子邮件地址或其他标识符),方便识别密钥。

完整的命令示例如下:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

执行这个命令后,ssh-keygen 会提示你输入保存密钥的文件路径和 passphrase(可选)。按照提示操作即可生成 SSH 密钥对。

生成的密钥对通常会保存在 ~/.ssh 目录下,默认情况下,公钥文件名为 id_rsa.pub,私钥文件名为 id_rsa

如果你需要将生成的公钥添加到 GitHub 或其他 Git 托管服务,可以使用以下命令查看公钥内容:

cat ~/.ssh/id_rsa.pub

然后将输出的内容复制到 Git 托管服务的 SSH 密钥设置页面中。

  1. 将公钥添加到 Git 托管服务

    • GitHub
      1. 登录 GitHub。
      2. 点击右上角的头像,选择“Settings”。
      3. 在左侧菜单中选择“SSH and GPG keys”。
      4. 点击“New SSH key”按钮。
      5. 将公钥内容粘贴到“Key”字段中,并为密钥添加一个标题(如“My Laptop”)。
      6. 点击“Add SSH key”按钮。
    • GitLab
      1. 登录 GitLab。
      2. 点击右上角的头像,选择“Settings”。
      3. 在左侧菜单中选择“SSH Keys”。
      4. 将公钥内容粘贴到“Key”字段中,并为密钥添加一个标题(如“My Laptop”)。
      5. 点击“Add key”按钮。
  2. 配置本地 Git 仓库使用 SSH URL: 确保你的本地 Git 仓库配置了使用 SSH URL 进行远程操作。例如:

    git remote set-url origin git@github.com:username/repo.git
  3. 测试 SSH 连接: 你可以使用以下命令测试 SSH 连接是否成功:

    ssh -T git@github.com

    如果连接成功,你会看到类似如下的输出:

    Hi username! You've successfully authenticated, but GitHub does not provide shell access.

私钥

私钥(Private Key)在 SSH 密钥对中扮演着至关重要的角色。私钥是保密的,不应该与任何人共享。它的主要用途包括:

  1. 身份验证: 当你使用 SSH 连接到远程服务器或 Git 托管服务时,私钥用于验证你的身份。服务器会使用你的公钥(Public Key)来加密一条消息,然后只有拥有相应私钥的人才能解密并读取这条消息。这个过程称为“公钥加密”或“非对称加密”。
  2. 数字签名: 私钥还可以用于生成数字签名,以证明某个文件或消息确实是由你创建或发送的。数字签名可以防止篡改和伪造,确保数据的完整性和真实性。
  3. 安全通信: 在 SSH 会话中,私钥用于建立安全的加密通道,保护数据在传输过程中的机密性和完整性。

以下是一些具体的应用场景:

  • 远程登录: 当你使用 ssh user@host 命令连接到远程服务器时,SSH 客户端会使用你的私钥进行身份验证。如果服务器上配置了你的公钥,并且和你本机上的私钥匹配,你就可以成功登录。

  • Git 操作: 当你使用 SSH URL 进行 Git 操作(如 git pushgit pull)时,Git 会使用你的私钥进行身份验证。例如:

    git clone git@github.com:username/repo.git
  • 文件传输: 当你使用 SCP 或 SFTP 进行安全的文件传输时,SSH 会使用你的私钥进行身份验证。例如:

    scp localfile user@host:/remote/directory

保护私钥的安全

由于私钥的敏感性,必须采取适当的措施来保护它:

  1. 设置 Passphrase: 在生成 SSH 密钥对时,ssh-keygen 会提示你设置一个 Passphrase。Passphrase 用于加密私钥文件,增加一层额外的安全保护。即使私钥文件被盗,没有 Passphrase 也无法使用。

  2. 限制访问权限: 确保私钥文件的访问权限设置为仅限你本人访问。你可以使用以下命令设置权限:

    chmod 600 ~/.ssh/id_rsa
  3. 定期更换密钥: 定期生成新的 SSH 密钥对,并删除旧的密钥对,以减少密钥泄露的风险。

通过这些措施,你可以确保私钥的安全,从而保护你的系统和数据免受未经授权的访问。

know_host 文件

在 SSH 密钥文件夹(通常是 ~/.ssh)中,known_hosts 文件用于存储你已经连接过的远程主机的公钥指纹。这个文件的作用是防止中间人攻击(Man-in-the-Middle Attack)。

当你第一次连接到一个新的远程主机时,SSH 客户端会提示你确认主机的指纹,并将其存储在 known_hosts 文件中。以后每次连接到这个主机时,SSH 客户端会检查主机的指纹是否与 known_hosts 文件中的记录匹配。如果不匹配,SSH 客户端会发出警告,提示你可能存在安全风险。

known_hosts 文件的格式通常如下:

主机名,IP地址 公钥类型 公钥

例如:

github.com,192.30.255.113 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmd...

known_hosts 文件中的条目可以手动编辑,但通常不建议这样做,除非你确切知道自己在做什么。

至于 known_hosts.old 文件,它通常是在更新 known_hosts 文件时生成的备份文件。例如,当你更新 SSH 客户端或操作系统时,可能会重新生成 known_hosts 文件,并将旧文件重命名为 known_hosts.old

处理 known_hosts 文件的常见操作

  1. 查看 known_hosts 文件内容

    cat ~/.ssh/known_hosts
  2. 删除特定主机的条目: 如果你需要删除某个主机的条目,可以使用文本编辑器手动编辑 known_hosts 文件,或者使用以下命令:

    ssh-keygen -R 主机名或IP地址

    例如:

    ssh-keygen -R github.com
  3. 重新连接主机: 删除条目后,当你再次连接到该主机时,SSH 客户端会提示你确认新的主机指纹,并将其添加到 known_hosts 文件中。

通过这些操作,你可以管理 known_hosts 文件,确保 SSH 连接的安全性和可靠性。

可信列表

Q: know_host文件就是把主机添加到可信列表的时候会产生的吗

Fitten Code:

A: 是的,当你第一次连接到一个新的远程主机时,SSH 客户端会提示你确认主机的公钥指纹,并将其添加到 known_hosts 文件中。这个过程实际上就是将该主机添加到你的可信列表中。

具体步骤如下:

  1. 第一次连接到新主机: 当你第一次使用 ssh user@host 命令连接到一个新的远程主机时,你会看到类似如下的提示:

    The authenticity of host 'host (IP地址)' can't be established.
    RSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
    Are you sure you want to continue connecting (yes/no)?
  2. 确认主机指纹: 你需要输入 yes 来确认主机的指纹,并将其添加到 known_hosts 文件中。此时,SSH 客户端会显示类似如下的消息:

    Warning: Permanently added 'host,IP地址' (RSA) to the list of known hosts.
  3. 指纹存储在 known_hosts 文件中: 确认后,主机的公钥指纹会被存储在 ~/.ssh/known_hosts 文件中。以后每次连接到这个主机时,SSH 客户端会检查主机的指纹是否与 known_hosts 文件中的记录匹配。

通过这个过程,SSH 客户端确保你连接到的主机是预期的主机,而不是中间人攻击者伪装的主机。这有效地防止了中间人攻击,提高了连接的安全性

Git

git 基本命令

git init

git init: 用于在一个空文件夹初始化 git 项目,初始化之后,会出现一个**.git**文件夹,里面存储你的仓库和 git 项目信息

git clone

需求: 已知仓库在云端,拉取云端仓库到本地

使用git clone git@gitee.com:Ozxm/qt.git --depth 10 命令,进入 git 托管平台, 点击仓库,代码/Code,clone 按钮,随便找一个方式(推荐使用 ssh 或者 http 协议)

参数:

  • --depth: 在 Git 中用于创建一个浅克隆(shallow clone),即只克隆仓库的历史记录中的最近一部分(最近的 n 次提交),而不是完整的仓库历史记录。这个参数可以显著减少克隆操作所需的时间和磁盘空间,特别是对于大型仓库

  • 扩展浅克隆

    如果你在后续操作中需要更多的历史记录,可以使用以下命令扩展浅克隆:

    git fetch --depth <new-depth>

    例如,如果你最初进行了 --depth 1 的浅克隆,并希望获取更多的历史记录:

    git fetch --depth 10

通过这些命令,你可以根据需要灵活地使用浅克隆和扩展浅克隆,以平衡速度和完整性

git status

git status: 查看状态,确定一下是否有没有 track 的子模块

git config

git config: 用于配置 git 信息,便于查找是谁提交的修改,追根溯源

git config --global user.email "example@163.com"
git config --global user.name "usr'

git checkout

git checkout -b test: 创建新分支 test 并切换到新分支

  • 在某个特定的分支(例如 feature 分支)的基础上创建一个新的分支。以下是具体步骤:
  1. 切换到基础分支: 首先,你需要切换到你希望作为基础的分支。例如,假设你想在 feature 分支的基础上创建新分支:
git checkout feature
  1. 创建并切换到新分支: 然后,你可以使用 git checkout -b 命令创建一个新的分支,并立即切换到该分支。例如,假设你要创建一个名为 test 的新分支:
git checkout -b test

git add

把文件暂存更改,也可以直接使用 Vscdoe 的图形化界面(+号按钮)

git commit

提交更改到本地仓库,也可以直接使用 Vscdoe 的图形化界面(蓝色大框”√ 提交”)
git commit -m “[提交标题]详细” 推荐提交信息格式

git push

  • 推送本地分支到远程仓库
git push origin2 master

这将把本地的 master 分支推送到名为 origin2 的远程仓库。

git push --set-upstream origin test
第一次提交新分支需要发布分支,使用上面的代码,也可以直接使用 Vscode 的图形化界面(发布分支)
后续可直接使用git push

-f: 表示强制提交

git pull

从远程仓库拉取更新

git pull origin master

这将从名为 origin的远程仓库拉取 master 分支的更新。

git reset

git reset --soft HEAD^: 回退到上一次提交

git 进阶命令

git remote

  • git remote -v: 列出我当前关联的远程仓库和分支
  • git remote add origin git@gitee.com:example.git: 命令用于向你的 Git 仓库添加一个新的远程仓库。这个命令将一个名为 origin的远程仓库 URL 添加到你的本地 Git 配置中

git fetch

git fetch 命令用于从远程仓库下载最新的更改,但不会自动合并或修改当前工作目录中的内容。它只是更新本地仓库的远程跟踪分支,使你能够查看远程仓库的最新状态。

  1. 获取远程更新git fetch 会将远程仓库中的新提交、分支和标签等信息下载到本地,但并不会直接 merge 到当前分支。
  2. 查看远程更新:通过 git fetch 拉取远程更新后,可以使用 git log 等命令查看远程分支的最新提交,不会对当前工作产生影响。
  3. 准备后续操作:在合并远程分支更新前,先使用 git fetch 获取远程最新提交历史,便于后续 merge 或 rebase 等操作。

基本用法

git fetch <远程仓库>

其中 <远程仓库> 是远程仓库的名称,通常是 origin

示例

假设你有一个名为 origin 的远程仓库,并且希望获取最新的更改:

git fetch origin

常用选项

  • --all:获取所有远程仓库的更新。

    git fetch --all
  • --prune:在获取更新之前,删除本地已经不存在的远程分支的跟踪分支。

    git fetch --prune origin
  • --tags:获取所有的标签(tags)。

    git fetch --tags origin

查看更新

在执行 git fech 之后,你可以使用以下命令查看远程分支的更新:

  • git branch -r:查看所有远程跟踪分支。

    git branch -r
  • git log <本地分支>..<远程跟踪分支>:查看远程跟踪分支相对于本地分支的差异。

    git log master..origin/master

合并更新

git fetch 不会自动合并或修改当前工作目录中的内容。如果你希望将远程分支的更新合并到本地分支,可以使用 git mergegit pull 命令。例如:

  • git merge:将远程跟踪分支合并到当前分支,用于将两个分支的历史合并。它会创建一个新的合并提交,并保留合并前两个分支的历史。

    git merge origin/master
  • git pull:相当于 git fetch 加上 git merge

    git pull origin master

git rebase

git rebase 是一种不同于 git merge 的合并更改的方式。git rebase 通过将当前分支的提交重新应用到目标分支的最新提交之上,从而改变提交历史,使其更加线性和整洁。

基本用法

git rebase <目标分支>

其中 <目标分支> 是你希望将当前分支的提交重新应用到的分支。

示例

假设你在一个名为 feature 的分支上工作,并且希望将其提交重新应用到 master 分支的最新提交之上:

git checkout feature
git rebase master

工作原理

  1. 找到两个分支的共同祖先git rebase 首先找到当前分支和目标分支的共同祖先。
  2. 保存当前分支的提交:将当前分支的提交保存为临时文件。
  3. 将当前分支重置到目标分支的最新提交:将当前分支的 HEAD 重置到目标分支的最新提交。
  4. 重新应用保存的提交:按照顺序重新应用之前保存的提交。

冲突解决

如果在重新应用提交的过程中发生冲突,git rebase 会暂停并提示你解决冲突。解决冲突后,使用以下命令继续 rebase 过程:

git add <冲突文件>
git rebase --continue

中断 rebase

如果你希望中断 rebase 过程并恢复到 rebase 之前的状态,可以使用以下命令:

git rebase --abort

优缺点

优点

  • 线性的提交历史git rebase 可以使提交历史更加线性和整洁,便于查看和理解。
  • 避免合并提交git rebase 不会创建合并提交,从而保持提交历史的简洁。

缺点

  • 改变提交历史git rebase 会改变提交历史,可能会影响其他开发者的工作。
  • 冲突处理:如果在 rebase 过程中发生冲突,需要手动解决冲突,这可能会比较复杂。

示例流程

  1. 切换到当前分支

    git checkout feature
  2. 执行 rebase

    git rebase master
  3. 解决冲突(如果需要)

    git add <冲突文件>
    git rebase --continue
  4. 完成 rebase

    git rebase --continue

    git cherry-pick

    要将某个特定的提交(通过其哈希值识别)引入当前分支,可以使用以下命令

    git cherry-pick <commit_hash>

对于子模块更新

git submodule update --init --recursive 命令用于初始化和更新 Git 子模块(submodules)。子模块允许你在主仓库中包含其他 Git 仓库,并且可以独立地管理这些子仓库的版本。

  • 初始化子模块--init): 如果子模块之前没有被初始化过,这个选项会初始化子模块,创建必要的子模块配置文件(.gitmodules)和子模块目录。
  • 递归更新子模块--recursive): 这个选项会递归地更新所有子模块及其嵌套的子模块。也就是说,如果子模块本身也包含子模块,这个命令会一并处理这些嵌套的子模块。

命令会执行以下操作:

  • 初始化所有未初始化的子模块。
  • 更新所有子模块到指定的提交(通常是主仓库中记录的提交)。
  • 递归地处理所有嵌套的子模块。

这个命令通常在你克隆一个包含子模块的仓库后使用,以确保所有子模块都被正确初始化和更新到指定状态。例如:

git clone --recurse-submodules <主仓库URL>
cd <主仓库目录>
git submodule update --init --recursive

gitee 和 github 不同配置

Gitee(码云)和 GitHub 是两个不同的 Git 托管服务,虽然它们都支持 Git 协议,但在某些情况下,你可能需要为它们配置不同的 Git 设置。以下是一些常见的配置需求和方法:

  1. 不同的远程仓库 URL: 如果你在 Gitee 和 GitHub 上都有仓库,并且希望在同一个本地仓库中管理它们,你需要为每个远程仓库配置不同的 URL。例如:

    git remote add github https://github.com/username/repo.git
    git remote add gitee https://gitee.com/username/repo.git

    这样,你可以使用不同的远程名称来区分它们:

    git push github master
    git push gitee master
  2. 不同的用户配置: 如果你在 Gitee 和 GitHub 上使用不同的用户名和电子邮件地址,可以在本地仓库中配置不同的用户信息。例如:

    git config user.name "GitHub User"
    git config user.email "github@example.com"

    然后在另一个仓库中:

    git config user.name "Gitee User"
    git config user.email "gitee@example.com"
  3. 不同的 SSH 密钥: 如果你在 Gitee 和 GitHub 上使用不同的 SSH 密钥,可以在 ~/.ssh/config 文件中为每个主机配置不同的密钥。例如:

    # GitHub
    Host github.com
        HostName github.com
        IdentityFile ~/.ssh/id_rsa_github
        User git
    
    # Gitee
    Host gitee.com
        HostName gitee.com
        IdentityFile ~/.ssh/id_rsa_gitee
        User git
  4. 不同的 Git 配置文件: 如果你希望为 Gitee 和 GitHub 使用不同的 Git 配置文件,可以在克隆仓库时指定不同的配置文件。例如:

    GIT_CONFIG=~/github.gitconfig git clone https://github.com/username/repo.git
    GIT_CONFIG=~/gitee.gitconfig git clone https://gitee.com/username/repo.git

git 配置文件

Git 配置文件用于存储 Git 的全局或本地配置选项,例如用户名、电子邮件地址、别名等。

生成 SSH 密钥

  1. 生成 GitHub 的 SSH 密钥

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f ~/.ssh/id_rsa_github

    这将生成两个文件:~/.ssh/id_rsa_github(私钥)和 ~/.ssh/id_rsa_github.pub(公钥)。

  2. 生成 Gitee 的 SSH 密钥

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f ~/.ssh/id_rsa_gitee

    这将生成两个文件:~/.ssh/id_rsa_gitee(私钥)和 ~/.ssh/id_rsa_gitee.pub(公钥)。

配置 SSH 客户端

~/.ssh/config 文件中为每个主机配置不同的密钥。例如:

# GitHub
Host github.com
    HostName github.com
    IdentityFile ~/.ssh/id_rsa_github
    User git

# Gitee
Host gitee.com
    HostName gitee.com
    IdentityFile ~/.ssh/id_rsa_gitee
    User git

配置 Git

如果你希望为不同的仓库使用不同的 Git 配置文件,可以在克隆仓库时指定不同的配置文件。例如:

  1. 克隆 GitHub 仓库并使用特定的配置文件

    GIT_CONFIG=~/github.gitconfig git clone git@github.com:username/repo.git
  2. 克隆 Gitee 仓库并使用特定的配置文件

    GIT_CONFIG=~/gitee.gitconfig git clone git@gitee.com:username/repo.git

创建和编辑 Git 配置文件

  1. 创建 GitHub 的 Git 配置文件

    touch ~/github.gitconfig
  2. 编辑 GitHub 的 Git 配置文件

    [user]
        name = GitHub User
        email = github@example.com
  3. 创建 Gitee 的 Git 配置文件

    touch ~/gitee.gitconfig
  4. 编辑 Gitee 的 Git 配置文件

    [user]
        name = Gitee User
        email = gitee@example.com