Git
Model for Git
type blob(file) = array<byte>; |
SHA-1 is a hexadecimal strings that are 40 characters long(namely 160bits)
references = map<string(SHA-1),string(human-readable names)>
In reality Git only mainly maintains two pieces of data—objects and references.
Command For Git
git init |
在用了 git push -u origin main 后我如何让本地的 main 分支跟踪 origin/master 分支?
你之前用
git push -u origin main
将本地main
分支和远程origin/main
关联起来了。现在你想让本地的main
分支转而跟踪origin/master
分支。要做到这一点,你可以使用
git branch
命令的--set-upstream-to
选项。
更改本地分支的跟踪关系
首先,确保你的本地 main 分支是最新的。
这很重要,因为如果你要跟踪 origin/master,你应该先确保 origin/master 的最新状态已经在你的本地。
Bash
git fetch origin这条命令会从
origin
远程仓库下载所有新的分支和提交信息,但不会自动合并到你当前的分支。切换到
main
分支(如果不在的话):Bash
git checkout main设置本地
main
分支跟踪origin/master
:Bash
git branch --set-upstream-to=origin/master main
git branch
: Git 分支管理命令。--set-upstream-to=origin/master
: 指定要将当前分支(或指定的分支)的上游设置为origin
远程仓库的master
分支。main
: 这是你希望设置跟踪关系的本地分支名称。执行此命令后,你会看到类似这样的输出:
Branch 'main' set up to track remote branch 'master' from 'origin'.
确认更改
你可以使用
git status
或git branch -vv
来验证新的跟踪关系:
git status
现在当你运行 git status 时,Git 会告诉你你的本地 main 分支是领先或落后于 origin/master 的。
例如:
Bash
On branch main
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean或者
Bash
On branch main
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree cleangit branch -vv
这个命令会显示所有本地分支及其跟踪的远程分支信息。
你会看到类似这样的输出:
* main <commit_hash> [origin/master] <commit_message>
another-branch <commit_hash> [origin/another-branch] <commit_message>这里的
[origin/master]
明确表示你的本地main
分支现在正在跟踪origin/master
。
注意事项
同步内容: 仅仅更改跟踪关系并不会自动合并
origin/master
的内容到你的main
分支。如果你想把origin/master
的最新代码同步到你的本地main
分支,你需要执行git pull
(在设置了新的跟踪关系后)。Bash
git pull由于你已经将
main
跟踪到origin/master
,现在git pull
会自动从origin/master
拉取并合并到本地main
。分支名称: 在许多新项目中,
main
已经是默认的主分支名称。如果你选择让main
跟踪master
,请确保你理解这样做的原因和潜在的影响,比如在 Git 托管平台(如 Gitee)上,你的 Pull Request 默认目标分支可能仍是master
,这可能会导致一些混乱。通常建议本地主分支和远程主分支保持一致。
git pull
:拉取并合并
作用:
git pull
是一个组合命令,它实际上等于执行了两个步骤:
git fetch
:从远程仓库下载最新的更改。git merge
(默认):将这些下载下来的更改自动合并到你当前所在的本地分支。
- 你也可以配置
git pull
默认执行git rebase
而不是git merge
(通过git config pull.rebase true
)。影响工作区:
git pull
会立即更新你的本地工作区,将远程的更改反映到你正在编辑的文件中。核心区别总结:
特性 git fetch
git pull
操作 下载远程更改到本地仓库 下载远程更改并自动合并到当前本地分支 影响 只更新本地的远程跟踪分支,不影响工作区 更新工作区,改变本地文件 组成 单一操作 git fetch
+git merge
(或git rebase
)何时用 想查看远程更新,但不立即合并 确定要同步并应用远程更新
JerryYu@DESKTOP-HGF21VE MINGW64 /d/CodeBuffer/Gitee (main) |