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来跟踪我用来推动这些更改的本地分支?
答案 0 :(得分:3)
您可以使用:
git branch --contains <commit id>
在你的情况下
git branch --contains 5473e16761f4074a69321b671f88e6a66103c41f
答案 1 :(得分:0)
答案 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
。
使用tonka
将cool-hack
设置为git config
或push.default
:这意味着在没有选项的情况下运行simple
会尝试推送本地分支,无论其名称是什么,到其默认上游。使用upstream
,除非该分支确实具有相同的名称,否则将拒绝。也就是说,如果本地分支git push
是“跟踪”simple
,那么您现在所在的当前分支是tonka
,那么origin/tonka
(没有其他参数)会要求tonka
更新 git push
以匹配您的。但是,如果本地分支origin
正在跟踪tonka
并且您在cool-hack
,则推送将失败,除非您使用origin/tonka
设置。
因此,请尝试使用本地跟踪分支,这样您就可以cool-hack
(以及upstream
后跟git push
或git fetch
)需要打字。此外,git rebase
将告诉您远程分支的名称。