使用 git bash:我在我的主分支上工作,推送它并决定我想要实现一个新功能。我为此创建了一个新分支。后来我添加了另一个功能,创建了另一个分支。
我测试了所有内容并且它正常工作,所以我决定将所有内容合并到我的主分支。我将两个新分支推送到远程仓库。
现在,使用我的浏览器 github 建议为新分支创建拉取请求,我这样做了,然后建议我可以安全地合并,因为没有冲突。所以我将所有分支合并到master。
我想,既然我在网上做了这个,我当地的分支机构就不会再更新了。
$ git status
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
我真的不敢相信这一点,所以我决定从我的远程仓库中提取。
$ git pull origin master
remote: Enumerating objects: 2, done.
remote: Counting objects: 100% (2/2), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 2 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (2/2), done.
From https://github.com/name/repo
* branch master -> FETCH_HEAD
ID..ID master -> origin/master
Updating ID..ID
Fast-forward
file1 | 67 +++--
file2 | 25 ++
file3 | 292 +++++++++++----------
3 files changed, 221 insertions(+), 163 deletions(-)
create mode 100644 newfile
为什么 git 认为我的本地主分支是最新的,而事实上却不是?
免责声明:我对 git 不太有经验,并且只在我的存储库上工作。
通过 Github 完成工作后,您需要运行
git fetch
来刷新有关远程跟踪分支的信息并查看 git status
的任何更新。
git pull
,简单来说,就是做git fetch
和git merge
。
这个SO问题充满了关于此的重要信息。
当您执行
git status
时,git 会将本地 master 分支与远程 master 分支的“本地副本”进行比较。一开始这可能会令人困惑,但实际上非常简单。
您的本地存储库保留远程存储库引用的副本,因此 git status 不涉及任何网络活动,它完全是本地操作。
要更新远程分支的这些本地副本,您需要
git fetch
或
git pull
,就像您所做的那样,无论如何,这都是在内部使用 git fetch 的。只有在此时,您的本地存储库才会获取在线操作(您的拉取请求)的更新版本。
”,git 将向您显示,对于推送,您的远程主存储库的本地副本“已过时”: [...] 远程分支: 主要履带式 为“git pull”配置的本地分支: main 与远程 main 合并 为“git Push”配置的本地引用: main 推送到 main
(本地已过时)如果您在另一个最新的本地存储库中执行相同的操作,git 将相应地向您显示:
[...] 远程分支: 主要履带式 为“git pull”配置的本地分支: main 与远程 main 合并 为“git Push”配置的本地引用: 主要推送到主要
(最新)然后你知道你必须执行 git fetch + git merge 或 git pull。