240526_Git进阶

Haoliang Tang Lv3

推荐看看这篇 https://dev.to/tbroyer/how-i-teach-git-3nj3

GitHub上从repo的Settings里更改了Default branch.把默认分支从main改为了new_dev,不是rename.

刚clone完本地只有一个默认分支new_dev

当我想要创建一个本地分支main想要和remote的main同步

然后我一看这个本地的main分支的最新commit是和new_dev同步的。

そりゃそうだ。就仅仅创建了个本地分支,管你这本地分支叫什么name,它又不知道远程main分支的信息。所以本地git branch xxx这个xxx分支就是和default branch是同步的 以当前的默认分支的最新commit为起点,这个xxx分支还没有关联远程分支。

我们用一个牛逼的命令git branch -vv查看一下:

查看本地的branch及其对应的远程upstream branch

1
git branch -vv

可见本地的main分支没有关联的upstream

我想让这个本地main分支和remotes/origin/main同步,于是:

这样是不对的。

应该--set-upstream-to (第一次push时的-u参数就是设置upstream)

设置upstream

1
2
3
git branch --set-upstream-to origin/xxx
git branch --set-upstream-to=origin/xxx
git branch -u origin/xxx

以上这些都行

这样本地的main分支的远程upstream就是origin/main了

但由于我们是从默认分支(new_dev)的目前最新的commit为起点创建的本地main分支,那就领先了origin/main 18个commit了

这时使用git reset来时光穿梭,给一个commit的hash就回到那个commit时的仓库样子

我们可以在github上或者git log找到要回到的commit的hash

1
2
git reset --hard bf037f516f2f046f7a8a06c81ccfa707540209ea
git reset --hard origin/main

可以是hash值,也可以是什么HEAD,HEAD^

OK,这样本地的main就和origin/main一样了

(这里git rebase我故意再试了一次)


在同一个分支下时,不要git pull(fetch+merge),而最好git pull --rebase(这样省去了无用的merge提交,使得提交历史linear, clean). 如果conflict了就git rebase --abort来撤销

Never* use git pull

  • Title: 240526_Git进阶
  • Author: Haoliang Tang
  • Created at : 2024-05-26 00:00:00
  • Updated at : 2025-04-29 23:53:55
  • Link: https://hl-tang.github.io/2024/05/26/240526_Git进阶/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments
On this page
240526_Git进阶