使用 git 日志创建推送列表

Use git log to create a list of pushes

我最近从 svn 转移到 git,我现在想知道如何生成一个按提交到存储库的日期排序的提交列表.
假设您在给定日期克隆了 origin/master,使用此列表您将确切知道您提取了哪个提交。

我读过许多解释 git 育儿系统的帖子(例如 , or this, even this)。在某些时候,我认为我可以将 git log-m --first-parent 选项一起使用。

但是看看我们现有的合并,第一个父级似乎混淆了很多次(即我们有 合并),因此无法遵循 origin/master

现在我想知道:我的请求是否可行?

我看到 Team Foundation Server/VSTS 显示的推送列表正是我想要的。合并将显示来自相应提交的消息。
他们甚至有 API for that. However, I'd like to avoid relying on them to generate my push-list.

VSTS 在服务器端记录额外的元数据。此元数据在您的本地存储库中不可用。除了标准的 Git-commit-data,它还记录:

  • 推送者(执行推送的用户的用户帐户)
  • 以及推送的确切时间
  • 以及作为该推送的一部分添加到存储库的提交。

此信息在您的本地 git 存储库中不可用。从分布式版本控制的角度来看,依赖这个元数据也有点奇怪,因为它可能在许多不同的时间被推送到许多不同的存储库。它可能已从一个存储库推送到另一个存储库。

只有在受祝福的存储库设置中(TFS/VSTS 服务器在您的设置中扮演的角色),该服务器才能跟踪推送到该服务器的内容。

因此,您需要依赖 TFS/VSTS 提供的 REST API。

关于解开旧的狐步舞合并:

What should I do about the pre-existing foxtrot merges that have infected my git repo? Nothing. Leave them. Unless you’re one of those antisocial people that rewrites master. Then go nuts. Actually, please don’t.

但如果你真的想理清头绪:

I accidentally created a foxtrot merge, but I haven’t pushed it. How can I fix it? You have three possible remedies:

  1. Simple rebase:
  2. Reverse your earlier merge to make origin/master the first-parent:
  3. Create a 2nd merge commit after the foxtrot merge to preserve origin/master’s –first-parent relation.

But please don’t do #3, because the final result is called a “Portuguese man o’ war merge,” and those guys are even worse than foxtrot merges.

Source: https://developer.atlassian.com/blog/2016/04/stop-foxtrots-now/