Git与GitHub指南
Git的安装
Windows: https://git-scm.com/download/win
Ubuntu:
1
sudo apt-get install 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. 查看已生成的密钥
打开终端(Windows中应使用Git Bash)
输入
ls -al ~/.ssh
以查看是否存在现有的 SSH 密钥。
1 | ls -al ~/.ssh |
- 检查目录列表以查看是否已经有 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连接成功。
1 | ssh -T [email protected] |
Git clone
1. 克隆行为
1 | //git@为使用ssh协议进行克隆 |
git clone
默认行为:- Git 会从远程仓库克隆所有分支的完整历史记录。
- 但是,克隆完成后,你的本地仓库只会创建远程仓库默认分支对应的本地分支(通常是
main
),且该本地分支自动与远程仓库中的分支相关联。 - 其他分支的记录存在于你的本地仓库中,但不会自动创建对应的本地分支。
2. 查看克隆下来的分支
在克隆完成后,你可以运行以下命令查看远程分支:
1 | git branch -r |
输出示例:
1 | origin/main |
这表示所有远程分支都被克隆到本地,但尚未创建相应的本地分支。
Remote Repository
1. 远程仓库名称
当克隆一个仓库时,Git 自动为远程仓库分配一个默认名称,通常是
origin
。一个本地仓库可以有多个远程仓库,可以通过以下命令查看所有远程仓库的名称和地址:
1
git remote -v
输出示例:
1
2origin 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
2origin/main
origin/feature-branch这些远程分支是只读的,表示远程仓库中对应分支的最新状态。
3. 上游分支(Upstream Branch)
当你在本地创建一个分支并与远程分支关联时,本地分支会设置一个上游分支。
可以用以下命令查看当前分支是否有上游分支:
1
git branch -vv
输出示例:
1
2new-branch 123abc [origin/new-branch] Commit message
main 456def [origin/main] Commit message可以手动设置关联:
1
git branch --set-upstream-to=origin/newbranch newbranch
本地分支 vs 远程引用
类型 | 定义 | 例子 |
---|---|---|
本地分支 | 你在本地创建的分支,可以直接进行代码更改和提交。 | main 、feature-branch |
远程分支的引用 | 远程仓库分支的最新快照,它们是只读的,用于了解远程仓库当前的状态。 | origin/main 、origin/feature-branch |
Git fetch
1.获取远程仓库的更新
1 | //默认从所有已配置的远程仓库获取更新 |
这些更新保存在本地的远程引用中(如
origin/main
)。不会自动合并到本地分支,因此不影响你的当前工作目录。
2.基于远程更新创建本地分支
假设远程有一个新分支
origin/new-branch
,你可以通过以下命令基于远程分支创建本地分支:1
2git 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 pull
与 git fetch
的区别
功能 | git pull |
git fetch |
---|---|---|
更新远程分支 | 是 | 是 |
更新当前分支 | 是,直接将远程更新合并到当前分支。 | 否,仅更新远程分支的引用(如 origin/main ),不会自动合并到本地分支。 |
冲突处理 | 如果有冲突,必须在合并时手动解决。 | 不涉及合并,不会引发冲突。 |
适用场景 | - 快速同步代码。 | - 检查远程更新内容,合并操作由你手动控制。 |
Fork
1.什么是 Fork?
- Fork 是 GitHub 提供的功能,允许你将一个仓库复制一个副本到你的 GitHub 账户下。
- 常用于开源项目的开发与维护,你可以 Fork 开源项目的仓库,在自己的副本中开发并提交改进,然后通过
Pull Request
将更改提回原始仓库。 - Fork 后的仓库是独立的,但可以通过
Sync fork
同步原始仓库的更新:- 原始仓库被称为 上游仓库(upstream repository)。
- 你创建的副本被称为 派生仓库(forked repository)。
Fork 工作流示例
Fork 开源项目:
- 在 GitHub 上点击仓库页面的
Fork
按钮。
- 在 GitHub 上点击仓库页面的
克隆 Fork 仓库到本地:
1
git clone https://github.com/your-username/forked-repository.git
配置上游仓库(可选)
为了保持 Fork 仓库与上游仓库同步,你需要将上游仓库配置为远程仓库:
1
git remote add upstream https://github.com/original-user/original-repository.git
查看远程仓库配置:
1
git remote -v
输出示例:
1
2
3
4origin 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
2git fetch upstream
git merge upstream/main或者直接拉取并合并:
1
git pull upstream main
如果你在本地同步了上游仓库的更改,并希望更新你的 Fork 仓库,可以使用:
1
git push origin main
- 开发新功能:
- 创建一个分支开发新功能(Pull Request 分支):
1 | git checkout -b feature-branch |
- 提交你的更改:
1 | git add . |
- 推送分支到 Fork 仓库:
1 | git push origin feature-branch |
- 创建 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,禁止转载。