git根本利用

[复制链接]
发表于 2025-9-29 10:32:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
git

默认环境下,克隆的长途堆栈会被定名为 origin
  1. git remote remove origin
  2. # 移除默认的远程仓库 origin
  3. git remote add origin https://github.com/CS144/minnow.git
  4. # 添加一个新的远程仓库 origin,指向自己的 GitHub 仓库
  5. git branch -M main
  6. #将当前分支重命名为 main(如果默认分支是 master,这一步会将其改为 main)
  7. git push -u origin main:
  8. # 将本地的 main 分支推送到远程仓库 origin,并设置 origin/main 为上游分支(-u 参数的作用)
  9. # 之后可以直接使用 git push 和 git pull,而不需要指定远程分支
  10. git remote add upstream https://github.com/CS144/minnow.git
  11. # 添加一个新的远程仓库 upstream,指向原始的上游仓库
  12. # 保留与上游仓库的连接,以便后续可以拉取上游的更新
  13. git remote -v
  14. # 查看远程仓库列表
  15. git fetch upstream(前面设置的https://github.com/CS144/minnow.git,将仓库改为upstream名,origin是git clone后默认的名;) branch_name
  16. # 拉取upstream的分支名
  17. git branch -d <branch_name>
  18. # 删除已经合并的本地分支
  19. git branch -D <branch_name>
  20. # 强制删除本地分支
  21. git merge upstream/check1-startercode
  22. # 将上面拉取的upstream/check1-startercode合并到本地分支main中
复制代码

git 提交
  1. A <- B<- C(main)
复制代码

  • A是第一次提交;
  • B是第二次提交;
  • C是第三次提交;
  • 当前C是最新一次的提交,以是main分支当前指向了C

git 创建新分支

假设如今 基于main分支创建了一个 新分支 feature:
  1. git checkout -b feature
复制代码

  • feature 分支也指向提交 C,而且继承了 C 的全部父提交(B 和 A)
  • 在 feature 分支上开始新的工作,比如修改文件并提交:
    1. A <- B <- C (main)
    2.            \
    3.             D (feature)
    复制代码
  • 通过创建 feature 分支,可以在不影响 main 分支的环境下举行新的开发
  • 完成工作后,可以将 feature 分支归并回 main 分支,大概继承在 feature 分支上开发

git 归并分支merge

git merge 下令归并两个分支时,Git 会实验将两个分支的汗青记载整合到一起
假设有以下提交汗青:
  1.       A <- B <- C (main)
  2.        \
  3.         D <- E (feature)
复制代码

  • main 分支的最新提交是 C
  • feature 分支的最新提交是 E
  • 它们的共同先人是提交 A
实验 git merge feature(在 main 分支上归并 feature 分支)时,Git 会创建一个新的归并提交 F:
  1.       A <- B <- C <- F (main)
  2.        \           /
  3.         D <- E <- (feature)
复制代码

  • 归并提交 F 有两个 parent 节点:

    • 第一个 parent 是 C(main 分支的最新提交)
    • 第二个 parent 是 E(feature 分支的最新提交)

  • 通过 F,Git 可以同时访问 main 和 feature 分支的全部汗青记载

git rebase

Git 中另一种归并分支的方法;通过“重新定位”提交记载来创造更线性的提交汗青

  • 找到当前分支和目的分支(通常是 main 或 master)的共同先人
  • 将当前分支上新增的提交提取出来,生存为临时文件
  • 将当前分支指向目的分支的最新提交
  • 将提取的提交逐个重新应用到目的分支的最新提交之后
  1.       A <- B <- C (main)
  2.        \
  3.         D <- E (feature)
复制代码
Rebase之后:
  1.       A <- B <- C <- D' <- E' (feature)
  2.                (main)
复制代码

HEAD

利用git checkout <commit-has>可以让HEAD直接指向某个提交记载,从而分离HEAD

^利用符

^ 利用符 用于访问某个提交记载的 父节点
假设:
  1. C0 <- C1 <- C2 <- C3 (main)
复制代码

  • main 分支的最新提交是 C3
    1. git checkout main
    2. ^
    复制代码
  • 此时 HEAD会指向C2
    1. git checkout main
    2. ^
    3. ^
    复制代码
  • 此时,HEAD 会指向 C1

切换分支的父节点

git branch -f main C6

  • 逼迫将 main 分支指向提交记载 C6
  • git branch -f 用于逼迫移动分支的指向
  • 将 main 分支移动到提交记载 C6,无论 main 分支之前指向那里
git checkout HEAD~1

  • 将 HEAD 移动到当条件交记载的第一个父节点
git branch -f bugFix HEAD~1

  • 逼迫将 bugFix 分支指向当前 HEAD 的父节点

reset 和 revert 撤回

假设原始提交链条:
  1. C0 <- C1 <- C2 <- C3 (HEAD -> main)
复制代码
实验 git reset C1后:
  1. C0 <- C1 (HEAD -> main)
复制代码
C2 和 C3 被抛弃(但内容大概生存在工作目次,取决于 reset 的模式)

  • --soft:仅移动分支指针,生存工作目次和暂存区的修改
  • --mixed(默认):移动分支指针,并重置暂存区,但生存工作目次的修改
  • --hard:彻底抛弃全部修改,分支指针、暂存区和工作目次全部回退

git revert:取消某个提交
假设原始提交链:
  1. C0 <- C1 <- C2 <- C3 (HEAD -> main)
复制代码
实验 git revert C3 后:
  1. C0 <- C1 <- C2 <- C3 <- C4 (HEAD -> main)
复制代码
C4 是一个新提交,内容是取消 C3 的更改
此时:C4 的内容与 C2 雷同

git cherry-pick


  • 复制提交:将某个提交的更改应用到当前分支,天生一个新的提交
  • 选择性归并:只归并某个分支上的特定提交,而不是整个分支
  • 将修复 bug 的提交从开发分支应用到生产分支
假设以下提交汗青:
  1.       C0 <- C1 <- C2 (main)
  2.        \
  3.         C3 <- C4 <- C5 (feature)
复制代码
如今:将 feature 分支上的提交 C4 应用到 main 分支

    1. git checkout main
    复制代码
    1. git cherry-pick C4
    复制代码
  • 结果:
    1.    C0 <- C1 <- C2 <- C4' (main)
    2.     \
    3.      C3 <- C4 <- C5 (feature)
    复制代码
    C4' 是 C4 的副本,内容与 C4 雷同,但哈希值差别

UI交互式变基 Interactive Rebase

Git 中一种高级利用,通过 git rebase -i 下令触发。它允许你以更风雅的方式修改提交汗青,比方重写、归并、拆分或删除提交
  1. git rebase -i <目标提交>
复制代码

git pull

git pull 就是 git fetch 和 git merge 的缩写

git pull --rebase;  git push

如果长途堆栈被别人提交了一次,当地的o/main没有更新,就无法push到长途堆栈;
此时:

  • 拉取长途堆栈的新更新;
  • 然后将当地的一次提交,归并后再push
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表