为什么“git status”不显示分支中未推送的提交?

22

一切都在标题中...

我读到了这个问题:查看未推送的 Git 提交

但我不明白为什么 git status 在主分支中显示所有未推送的提交,而在其他分支中却不显示任何内容。

有人可以解释一下吗?

编辑

这是我执行和得到的命令和输出:

aurelien@server:/home/repo/$ git branch
  new_feature
* master

aurelien@server:/home/repo/$ git checkout new_feature
Switched to branch 'new_feature'

aurelien@server:/home/repo/$ echo test > newfile.txt
aurelien@server:/home/repo/$ git add newfile.txt
aurelien@server:/home/repo/$ git commit -m "Test commit"
[new_feature 51c6a64] Test commit
1 file added
aurelien@server:/home/repo/$ git status
# On branch new_feature
nothing added to commit

为什么我使用 git status 命令时,我的提交记录没有出现?


可能是重复的问题:如何使现有的Git分支跟踪远程分支? - arnorhs
4
@arnorhs,你在技术上是正确的,但我认为OP只是不知道所有的跟踪分支机制,所以他们没有找到那个问题的机会。因此,我不会投票关闭答案。 - kostix
很酷,我理解了。我也可以想象如果不熟悉正确的Git术语来跟踪,人们会尝试以类似于OP问题的方式在谷歌上搜索问题。所有这些术语让人很难理解Git。 - arnorhs
git branch --set-upstream-to=origin/master master 对我有用。 - falsarella
1个回答

25

原因是你的主分支实际上有一个远程分支,即origin/master,你的分支已经设置为跟踪它。

这意味着每当你向主分支提交一次更改,然后执行git status,git就会告诉你本地分支和远程分支之间有哪些不同的提交。

当你创建一个新分支时,默认情况下没有相应的远程分支。你可以通过执行git branch -a来查看所有已设置的远程分支。

所以有两个问题:

1) 你的本地分支没有对应的远程分支 2) 你的分支没有设置为跟踪远程分支的更改

创建一个远程分支并设置跟踪你的本地分支的简单方法是将本地分支推送到远程分支:

git checkout new_feature
git push -u origin new_feature

通常情况下,如果你没有使用-u开关进行推送,那么不会设置任何跟踪,但是你的分支仍将被推送。但是当你传递-u开关时,它会告诉git你还想设置你的分支来跟踪远程分支的更改。

在你这样做并进行更改和提交后,再执行git status,你将得到期望的结果:“Your branch is ahead of origin/new_feature by 1 commit”。


我尝试了你建议的:git branch -u origin/my_other_branch,结果返回:错误:未知开关“u”... - Aurelien
我还发现了一个重复的问题,我为此添加了一个标记。 - arnorhs
两个问题:1)你有一个名为origin的上游吗?如果是,2)你已经将分支推送到远程分支了吗? - arnorhs
对于你的第二个问题,它并没有太多意义。未推送的提交是指尚未推送到相应远程分支的提交。如果没有远程分支,Git 就没有任何东西可以与你的本地分支进行比较。所以我有点困惑你的意思是什么。 - arnorhs
1
啊..不,那实际上是你使用git log的原因...通常,你会做类似这样的事情git diff origin/master(告诉你自从最新的origin主分支以来有什么变化)或者 git log origin/master..(告诉你你的分支有哪些提交,而origin/master没有)或者只需git log master..如果你的主分支是最新的。 - arnorhs
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接