Git:找到用于推送到原点的本地分支

时间:2014-01-16 22:37:47

标签: git

git新手。

我处于一种情况,我有一堆本地分支机构,我想跟踪我正在努力推进的更改原点。

我可以使用什么git命令?

我做了git log origin / branch7,并返回了一大堆提交。

特别是这一个:

commit 5473e16761f4074a69321b671f88e6a66103c41f
Author: Me
Date:   Mon Jan 13 12:17:26 2014 +1100

    Encapsulate static inner class. Formatted code.

如何使用提交ID来跟踪我用来推动这些更改的本地分支?

3 个答案:

答案 0 :(得分:3)

您可以使用:

git branch --contains <commit id>

在你的情况下

git branch --contains 5473e16761f4074a69321b671f88e6a66103c41f

答案 1 :(得分:0)

读了一些here并跑了:

git show-branch 

并列出了我为所有本地分支机构提交的所有提交。这使我能够跟踪我正在为该特定提交工作的本地分支。

答案 2 :(得分:0)

最终,这个问题没有保证答案。问题可归结为这样一个事实:可以将任何提交ID,推送到任何可写的遥控器上的任何可写名称:

git push +1234567:origin/bluebranch

假设您有一个ID可以缩写为1234567的提交,这将连接到名为origin的远程,并要求强制更新其分支bluebranch的提示为{ {1}}(好吧,无论完整的SHA-1是针对该本地commit-ID)。在你自己的回购中,那个提交根本不需要是分支的一角;它必须存在。

(即使使用1234567+标志,遥控器也有权拒绝更新。但这完全是另一回事。)

您可以做的最好的事情是查看哪些分支设置或包含在远程上标识的提交。请注意,分支名称只是表示提交图表中的哪个提交应该被视为该分支的“提示”:

--force

此处,提交 D--E <-- branch1 / A--B--C <-- branch2 \ F <-- branch3 出现在所有三个分支上,但它是B的“提示”,即使它在branch2上相当远,又在{{1}上退一步}}

使用branch1(如在Sergio Aristizábal's answer中),您可以发现提交branch3包含在所有三个分支中。查看git branch --contains,您可以看到所有分支的提示是什么,并比较原始ID,以查看远程分支的想法是否与您自己的匹配。但是,如果其他人添加了提交,并且您已在回购中选择了这些提交,但未在本地分支引用中提取,则它们不一定匹配。


最一般的规则是你不应该关心如何某个遥控器进入它现在所处的状态,你应该只关心想要发生什么接下来。您只需运行B以与“现在处于的状态”同步,然后四处查看状态,并选择如何处理本地分支(如果有)以使它们与远程同步(如果需要) ),可能移植(重新定位)旧提交和/或添加新提交(如果/根据需要)。

当然,作为人的人,获得正确的分支名称可以帮助记忆。 : - )


以下是“让分支名称正确”的一些有用提示:

  • 如果可能,请在本地仓库中使用与远程仓库中相同的名称。

    当您的本地分支命名为git show-ref但远程分支被命名为git fetch作为开发代码名称时,这确实令人困惑。

  • 使用一个名称对所有将要处理它的人来说意味着什么。

    代码名称tonka非常棒,如果这对每个人来说都意味着什么。否则它只是莫名其妙。您也可以称之为cool-hack

  • 使用tonkacool-hack设置为git configpush.default:这意味着在没有选项的情况下运行simple会尝试推送本地分支,无论其名称是什么,到其默认上游。使用upstream,除非该分支确实具有相同的名称,否则将拒绝。也就是说,如果本地分支git push是“跟踪”simple,那么您现在所在的当前分支是tonka,那么origin/tonka(没有其他参数)会要求tonka更新 git push以匹配您的。但是,如果本地分支origin正在跟踪tonka并且您在cool-hack,则推送将失败,除非您使用origin/tonka设置。

  • 因此,请尝试使用本地跟踪分支,这样您就可以cool-hack(以及upstream后跟git pushgit fetch)需要打字。此外,git rebase将告诉您远程分支的名称。