git 与仓库

98 阅读3分钟

sourceTree 重度依赖者,习惯摆脱这种依赖,所以写下来。

git 常用命令

git pull 和 git fetch 的区别

  • git fetch 只是将远程仓库的变化下载下来,并没有和本地分支合并。

  • git pull 会将远程仓库的变化下载下来,并和当前分支合并。

git rebase 和 git merge 的区别

git merge 和 git rebase 都是用于分支合并,关键在 commit 记录 的处理上不同:

  • git merge 会新建一个新的 commit 对象,然后两个分支以前的 commit 记录都指向这个新 commit 记录。这种方法会保留之前每个 分支的 commit 历史。
  • git rebase 会先找到两个分支的第一个共同的 commit 祖先记录, 然后将提取当前分支这之后的所有 commit 记录,然后将这个 commit 记录添加到目标分支的最新提交后面。经过这个合并后,两个分支合并后的 commit 记录就变为了线性的记录了。

代码仓库

常见的 github、gitee、gitlab 等,这里我们讲讲 GitHub。

如何提交一个 pr?

pr(Pull Request)是GitHub中一种重要的协作机制,‌它允许开发者向开源项目的维护者提交代码更改请求,‌以便其他人可以审查和讨论这些更改,‌最终决定是否将它们合并到主项目中。‌

第一步是 fork 目标仓库,相当于一个目标仓库的快照,相当于备份了一份,通过修改我们备份的代码,提交到我们 fork 的仓库后,再进行对目标仓库的 PR。

主要步骤如下:

  • Fork 主仓库并克隆到本地。

  • 添加主仓库作为上游远程仓库。

  • 创建新的分支进行开发并提交更改。

  • 获取上游仓库的最新更改并合并到本地主分支。

  • 将最新更改合并到你的功能分支,解决冲突。

  • 推送功能分支到你 fork 的远程仓库。

  • 在 GitHub 上提交 Pull Request。

如何保持本地的代码与远端目标仓库的代码一致?

  1. 克隆仓库(forked repository) : 你首先会从某个仓库克隆出自己的副本,例如从 GitHub 上 fork 一个项目,然后克隆到本地:

    git clone https://github.com/your-username/your-forked-repo.git
    cd your-forked-repo
    
  2. 添加上游远程仓库: 使用 git remote add upstream 命令,将原始项目(上游仓库)添加为远程仓库。这里的 xxx 是上游仓库的 URL。例如:

    git remote add upstream https://github.com/original-owner/original-repo.git
    
  3. 验证远程仓库: 你可以使用 git remote -v 命令来验证远程仓库是否添加成功:

    git remote -v
    

    输出应类似于:

    origin  https://github.com/your-username/your-forked-repo.git (fetch)
    origin  https://github.com/your-username/your-forked-repo.git (push)
    upstream  https://github.com/original-owner/original-repo.git (fetch)
    upstream  https://github.com/original-owner/original-repo.git (push)
    

之后的常用操作:

  1. 获取上游仓库的更新: 每当上游仓库有更新时,你可以将这些更新合并到你的分支中:

    git fetch upstream
    
  2. 合并更新到本地分支: 将上游仓库的更新合并到你正在工作的分支(例如 main 分支):

    git checkout main
    git merge upstream/main
    
  3. 解决合并冲突: 如果在合并过程中发生冲突,你需要手动解决冲突,然后提交合并结果。

  4. 推送更新到你的远程仓库: 最后,将合并后的代码推送到你自己的远程仓库:

    git push origin main