Git与GitHub指南

chenshan Lv1

Git的安装

Git的配置

使用以下命令设置名称,(将“Your Name”替换为你的首选用户名):

1
git config --global user.name "Your Name"

使用以下命令设置电子邮件(用你喜欢的电子邮件替换“youremail@domain.com”):

1
git config --global user.email "[email protected]"

通过SSH协议访问Github

1. 什么是SSH?

SSH(Secure Shell)是一种安全的网络协议,具体可以看我的另一篇博客。除了http外,我们可以使用 SSH在 GitHub 上的存储库中访问和写入数据。 通过 SSH 进行连接时,使用本地计算机上的私钥文件进行身份验证,提供了更加安全的数据传输。

2. 生成SSH密钥

打开终端,键入以下命令在本地计算机上生成新的 SSH 密钥,将示例中使用的电子邮件替换为 GitHub 电子邮件地址:

1
ssh-keygen -t ed25519 -C "[email protected]"

[!NOTE]

如果你使用的是不支持 Ed25519 算法的旧系统,请使用以下命令:

1
ssh-keygen -t rsa -b 4096 -C "[email protected]"

3. 查看已生成的密钥

  1. 打开终端(Windows中应使用Git Bash)

  2. 输入 ls -al ~/.ssh 以查看是否存在现有的 SSH 密钥。

1
ls -al ~/.ssh
  1. 检查目录列表以查看是否已经有 SSH 公钥。 默认情况下,GitHub 支持的公钥的文件名如下
    • id_rsa.pub
    • id_ecdsa.pub
    • id_ed25519.pub

4. 将公钥添加到Github上

查看并复制.pub公钥

1
cat ~/.ssh/id_ed25519.pub

将复制的公钥内容添加到Github账户的SSH密钥中。登录Github账户,点击右上角的个人头像,选择”Settings”,然后选择”SSH and GPG keys”。点击”New SSH key”按钮,将之前复制的公钥内容粘贴到”Key”输入框中,并为密钥添加一个描述。点击”Add SSH key”按钮完成添加。

5. 测试连接

完成密钥的添加后,我们可以在命令行输入以下命令测试SSH连接是否正常工作,如果一切正常,你会看到一条欢迎消息,表示SSH连接成功。

Git clone

1. 克隆行为

1
2
//git@为使用ssh协议进行克隆
git clone [email protected]:username/repository.git
  • git clone 默认行为:
    • Git 会从远程仓库克隆所有分支的完整历史记录。
    • 但是,克隆完成后,你的本地仓库只会创建远程仓库默认分支对应的本地分支(通常是 main),且该本地分支自动与远程仓库中的分支相关联。
    • 其他分支的记录存在于你的本地仓库中,但不会自动创建对应的本地分支。

2. 查看克隆下来的分支

在克隆完成后,你可以运行以下命令查看远程分支:

1
git branch -r

输出示例:

1
2
origin/main
origin/develop

这表示所有远程分支都被克隆到本地,但尚未创建相应的本地分支。

Remote Repository

1. 远程仓库名称

  • 当克隆一个仓库时,Git 自动为远程仓库分配一个默认名称,通常是 origin

  • 一个本地仓库可以有多个远程仓库,可以通过以下命令查看所有远程仓库的名称和地址:

    1
    git remote -v

    输出示例:

    1
    2
    origin  https://github.com/username/repository.git (fetch)
    origin https://github.com/username/repository.git (push)
  • 添加/删除远程仓库

    1
    2
    3
    4
    5
    //添加
    git remote add <remote-name> <repository-url>
    git remote add another-repo https://github.com/another-user/another-repo.git
    //删除
    git remote remove <remote-name>

2. 远程分支

  • 远程仓库的分支会以 remote-name/branch-name的形式存储在本地,比如:

    1
    2
    origin/main
    origin/feature-branch
  • 这些远程分支是只读的,表示远程仓库中对应分支的最新状态。

3. 上游分支(Upstream Branch)

  • 当你在本地创建一个分支并与远程分支关联时,本地分支会设置一个上游分支

  • 可以用以下命令查看当前分支是否有上游分支:

    1
    git branch -vv

    输出示例:

    1
    2
    new-branch  123abc [origin/new-branch]  Commit message
    main 456def [origin/main] Commit message
  • 可以手动设置关联:

    1
    git branch --set-upstream-to=origin/newbranch newbranch

本地分支 vs 远程引用

类型 定义 例子
本地分支 你在本地创建的分支,可以直接进行代码更改和提交。 mainfeature-branch
远程分支的引用 远程仓库分支的最新快照,它们是只读的,用于了解远程仓库当前的状态。 origin/mainorigin/feature-branch

Git fetch

1.获取远程仓库的更新

1
2
3
4
5
6
//默认从所有已配置的远程仓库获取更新
git fetch
//获取某个远程仓库的更新
git fetch <remote-name>
//只获取某个特定分支的更新
git fetch <remote-name> <branch-name>
  • 这些更新保存在本地的远程引用中(如 origin/main )。

  • 不会自动合并到本地分支,因此不影响你的当前工作目录。

2.基于远程更新创建本地分支

  • 假设远程有一个新分支 origin/new-branch,你可以通过以下命令基于远程分支创建本地分支:

    1
    2
    git fetch origin
    git checkout -b new-branch origin/new-branch

​ 此时你的本地分支会与该远程分支自动创建关联

Git pull

1. 从默认远程分支拉取并合并更新

1
git pull
  • 默认从当前分支的上游分支(upstream branch)拉取并合并更新。
  • 适用于已经设置了远程分支关联的场景。

2. 指定远程仓库和分支

1
git pull <remote-name> <branch-name>
  • 示例:

    1
    git pull origin main
    • origin 仓库的 main 分支拉取更新,并将更新合并到当前所在的本地分支(即使此时所在的本地分支不是main分支)。

3. 只拉取更新但不合并

  • 如果只想获取远程仓库的最新更改,而不立即合并,可以使用

    1
    git fetch

    然后手动合并:

    1
    git merge origin/main

git pullgit fetch 的区别

功能 git pull git fetch
更新远程分支
更新当前分支 是,直接将远程更新合并到当前分支。 否,仅更新远程分支的引用(如 origin/main),不会自动合并到本地分支。
冲突处理 如果有冲突,必须在合并时手动解决。 不涉及合并,不会引发冲突。
适用场景 - 快速同步代码。 - 检查远程更新内容,合并操作由你手动控制。

Fork

1.什么是 Fork?

  • Fork 是 GitHub 提供的功能,允许你将一个仓库复制一个副本到你的 GitHub 账户下。
  • 常用于开源项目的开发与维护,你可以 Fork 开源项目的仓库,在自己的副本中开发并提交改进,然后通过 Pull Request 将更改提回原始仓库。
  • Fork 后的仓库是独立的,但可以通过Sync fork同步原始仓库的更新:
    • 原始仓库被称为 上游仓库(upstream repository)
    • 你创建的副本被称为 派生仓库(forked repository)

Fork 工作流示例

  1. Fork 开源项目:

    • 在 GitHub 上点击仓库页面的 Fork 按钮。
  2. 克隆 Fork 仓库到本地:

    1
    git clone https://github.com/your-username/forked-repository.git
  3. 配置上游仓库(可选)

  • 为了保持 Fork 仓库与上游仓库同步,你需要将上游仓库配置为远程仓库:

    1
    git remote add upstream https://github.com/original-user/original-repository.git
  • 查看远程仓库配置:

    1
    git remote -v
  • 输出示例:

    1
    2
    3
    4
    origin    https://github.com/your-username/forked-repository.git (fetch)
    origin https://github.com/your-username/forked-repository.git (push)
    upstream https://github.com/original-user/original-repository.git (fetch)
    upstream https://github.com/original-user/original-repository.git (push)
  • 定期从上游仓库同步最新更改:

    1
    2
    git fetch upstream
    git merge upstream/main
  • 或者直接拉取并合并:

    1
    git pull upstream main
  • 如果你在本地同步了上游仓库的更改,并希望更新你的 Fork 仓库,可以使用:

    1
    git push origin main
  1. 开发新功能:
  • 创建一个分支开发新功能(Pull Request 分支):
1
git checkout -b feature-branch
  • 提交你的更改:
1
2
git add .
git commit -m "Add new feature"
  1. 推送分支到 Fork 仓库:
1
git push origin feature-branch
  1. 创建 Pull Request:
  • 登录 GitHub,进入你的 Fork 仓库,选择 feature-branch,点击 New Pull Request 提交你的更改给上游仓库。
  • 标题: Git与GitHub指南
  • 作者: chenshan
  • 创建于 : 2024-11-24 17:04:59
  • 更新于 : 2024-11-30 14:13:37
  • 链接: https://chenshan.link/2024/11/24/git/
  • 版权声明: 版权所有 © chenshan,禁止转载。
评论