【问题标题】:How to create a branch from newest commits如何从最新提交创建分支
【发布时间】:2021-10-15 07:13:12
【问题描述】:

最近我遇到了一个独特的问题,我必须在一个分支中只包含最新的提交,而丢弃所有旧的提交。

例如考虑我有这样的提交结构:

[main branch]
af474e3 (HEAD -> main) Updated modal UI
c0f9599 Added modal UI                    <-- This commit onwards is what our requirement is
e50c805 Updated button UI
de2ab3c Added button UI
9b1822f Initial commit

(我知道这听起来很傻,但是,)我想从 点开始获取所有(最新)提交以及与之相关的所有提交信息,即提交日期、提交作者等。

创建的分支必须如下所示:

[new branch]
af474e3 (HEAD -> new, master) Updated modal UI
c0f9599 Added modal UI

我试过removing/squashing commits with interactive rebasing,没用。 Cherry-picking 也不起作用。

这可以实现吗?有什么简单的方法可以实现吗?

【问题讨论】:

  • 您是否希望前 3 次提交中发生的任何更改仍然存在而没有自己的提交? (即,您是否要将前 4 次提交压缩为一个?)如果答案是否定的,那么请意识到您要保留的第 4 次和第 5 次提交必须不编辑或使用在前 3 次提交。
  • 您提到要维护 commit 名称和日期,但是,通常在重写时保留 author 名称和日期提交,而不是 commit 名称和日期。默认情况下,在重写提交时,commit 名称和日期将更改为“you”和“now”。你这样好吗?请注意,作者 名称和日期是您查看日志时通常显示的内容,因此通常每个人都允许将 commit 名称和日期更改为最后一次提交的人。
  • @TTT 正如您在第一条评论中所说的那样,我意识到当我尝试不同的方法时。如果较早的提交构成在较旧的提交中修改的相同文件,我不能使用较早的提交丢弃较旧的提交。一个艰难的教训!
  • @TTT,我错过了在我的问题中说我不需要提交消息相同。是的,我可以保留 提交消息提交日期
  • 在这种情况下,我认为您可以选择eftshift0's answer,因为我相信它可以满足您的需求。

标签: git github version-control branch conventional-commits


【解决方案1】:

您希望分支从修订版c0f9599 开始,文件和内容与该修订版类似?

git checkout --orphan new-branch c0f9599
git commit -C c0f9599 # use the same comment as c0f9599
git cherry-pick af474e3

给你! (当然,修订 ID 会有所不同)

【讨论】:

  • eftshift0,这很有魅力。我不知道checkout --orphan 选项。谢谢你。
猜你喜欢
  • 1970-01-01
  • 2019-09-29
  • 2011-11-02
  • 2018-05-03
  • 1970-01-01
  • 2015-03-22
  • 1970-01-01
  • 1970-01-01
  • 2017-07-07
相关资源
最近更新 更多