240526_Git进阶

推荐看看这篇 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 | git branch --set-upstream-to 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 | git reset --hard bf037f516f2f046f7a8a06c81ccfa707540209ea |
可以是hash值,也可以是什么HEAD,HEAD^
OK,这样本地的main就和origin/main一样了
(这里git rebase
我故意再试了一次)
在同一个分支下时,不要git pull
(fetch+merge),而最好git pull --rebase
(这样省去了无用的merge提交,使得提交历史linear, clean). 如果conflict了就git rebase --abort
来撤销
- 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.