【问题标题】:How can I modify a Git repository to be more "branchy" as it should have been?如何修改 Git 存储库以使其更加“分支”?
【发布时间】:2022-07-14 23:55:01
【问题描述】:

我有一个 git 存储库,其中只有一个分支“master”。 所以它就像

commit1 -> commit2 -> commit3 -> ... -> commit6

一些提交应该在功能分支上创建,然后与“main”合并。所以我想修改存储库,使其更加“分支”。

我想知道我可以使用哪些命令将最后一次提交移动到新功能分支,即

commit1 -> commit2 -> commit3 -> ... -> commit5 (master branch) -> commit6 (featurebranch1)

?

将中间的一些提交移动到新功能分支上,然后将其合并回“主”是否有用? 例如,

commit1 (master branch) -> commit2 (featurebranch2) -> commit3 (master branch) -> ... -> commit5 (master branch) -> commit6 (featurebranch1)

?

谢谢。

【问题讨论】:

  • 请注意,如果您使用“rebase + ff”之类的东西作为您的合并策略(我个人更喜欢合并提交,其他人可能同意也可能不同意)然后“分支”(基本上只是合并提交的存在)将不可见。换句话说:您可以轻松地假装您创建了功能分支并像这样合并它们,它看起来与您的存储库当前所做的完全一样。
  • 将提交移动到分支然后合并它们的目标只是装饰性的,对吧?是否真的应该在 master(或不同的分支)上并行发生其他一些变化?
  • @u 只有一个仓库
  • 第一个,你有六个提交,主控和特征都指向最后一个提交,你想把主控移回一个提交,很容易做到,例如git 重置。然后你可以将它合并到 master,但你必须使用 --no-ff 选项,否则快进合并将使你的提交树完全按照原来的样子。第二个也可以通过创建新分支(也许是 master2 临时分支)和挑选提交,然后使用 --no-ff 将这些分支合并到 master2 来完成。然后删除 master2 和 git branch --force master to last merge commit。
  • 但仅当您出于美观的原因想让它看起来像有分支并且您是唯一使用该存储库的人时才这样做。如果多人使用它,他们下次获取时会感到困惑。这样做的另一个原因是,如果您想了解更多和/或更加熟悉 git 的工作原理:D——这将是一个很好的练习。

标签: git


【解决方案1】:

我想知道我可以使用哪些命令将最后一次提交移动到新功能分支

对于最后一次提交,假设您是唯一一个在该存储库上工作的人。:

git switch -c featurebranch1 master
git switch -C master @~
git push --force

对于较旧的提交,您需要插入一个合并提交,从

c1--c2--c3--c4  (master)
To:
c1 -- M--c3--c4 (master)
  \  /
   c2

这是

git switch -c tmp master
git switch -c featurebranch2 c2
git switch -C master c1
git merge --no-ff featurebranch2
git rebase --onto master c3~ tmp
git push --force

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-06
    • 2011-04-21
    • 2012-12-25
    • 2014-11-27
    • 2016-02-20
    • 2013-03-03
    • 1970-01-01
    • 2022-12-04
    相关资源
    最近更新 更多