使用 git 清理混乱的分支
Clean up a messed branch with git
我好像把一个小项目的开发分支搞得面目全非了。我现在想要实现的是告诉 git 以下内容:嘿 git。这是名为 X 的分支。现在我在基于 X 的名为 Y 的分支中。请查看不同之处,将它们提交到单个提交中,然后也更新原点。
背景:该项目位于 git 实验室存储库中。有一个开发分支称为 development(适当地),我正在修改它(分支,比如 january_dev)。现在由于最能描述的不幸情况 "I have not the faintest idea what I am doing" 我搞砸了那个分支的历史。
不久前,我将我的 january_dev 重新定位于开发,这意味着目前除了一个来自开发分支的提交之外,所有其他提交也在我的分支中。
目前,将分支重新定位于开发的尝试最终以重播 january_dev 提交的整个历史而告终,结果一团糟,因为我已经做了很多工作,在两者之间来回切换概念等。所以,基本上,我对解决冲突没有信心。我想要的只是保持现状,重新基于 "development" 从理论上讲,这应该很容易,因为文件中只有两行代码我什至没有触及需要从开发中删除到我的分行。
我知道我可以做的,而且我认为它会起作用,如下所示:
- 在开发分支的基础上新建一个分支。称之为 january_dev2:
git checkout -b january_dev2 && git push
- 从 january_dev 复制我一直在处理的文件。只有几个。
git commit -a -m 'a new beginning'
git push
- 将 january_dev2 重命名为 january_dev:
git branch -m january_dev2 january_dev ; git push origin january_dev ; git push origin -u january_dev ; git push origin --delete january_dev2
然后我会丢失我提交的整个历史记录,但我不关心也不需要它们。
你怎么看?
Here is the branch called X. And now here I am in the branch called Y, which is based on X. Please see what the differences are, commit them in a single commit and then update the origin as well.
git switch Y
– 切换到您要保存的分支(您已经这样做了,但以防万一)。
git switch -c tmp
– 创建一个名为 tmp
的新临时分支以防万一。
git reset X
– 将 tmp
分支指向与 X
相同的提交,同时保留分支 Y
. 的工作树
git add . && git commit
– 在一次提交中记录 X
和 Y
之间的所有更改。
所以现在您的 X
和 Y
分支保持与以前相同的状态,但是,此外,您还有一个名为 tmp
的新分支,它本质上是 X
+ 一个包含 X
和 Y
.
之间差异的提交
从你的描述中不清楚你想把什么推到哪里,但是,根据你的需要,你现在可以做git branch -f X
或git branch -f Y
来相应地改变,您的 X
或 Y
分支与 tmp
相同。然后,您只需 switch
一如既往,push
随心所欲。完成后,您可以git branch -D tmp
.
我好像把一个小项目的开发分支搞得面目全非了。我现在想要实现的是告诉 git 以下内容:嘿 git。这是名为 X 的分支。现在我在基于 X 的名为 Y 的分支中。请查看不同之处,将它们提交到单个提交中,然后也更新原点。
背景:该项目位于 git 实验室存储库中。有一个开发分支称为 development(适当地),我正在修改它(分支,比如 january_dev)。现在由于最能描述的不幸情况 "I have not the faintest idea what I am doing" 我搞砸了那个分支的历史。
不久前,我将我的 january_dev 重新定位于开发,这意味着目前除了一个来自开发分支的提交之外,所有其他提交也在我的分支中。
目前,将分支重新定位于开发的尝试最终以重播 january_dev 提交的整个历史而告终,结果一团糟,因为我已经做了很多工作,在两者之间来回切换概念等。所以,基本上,我对解决冲突没有信心。我想要的只是保持现状,重新基于 "development" 从理论上讲,这应该很容易,因为文件中只有两行代码我什至没有触及需要从开发中删除到我的分行。
我知道我可以做的,而且我认为它会起作用,如下所示:
- 在开发分支的基础上新建一个分支。称之为 january_dev2:
git checkout -b january_dev2 && git push
- 从 january_dev 复制我一直在处理的文件。只有几个。
git commit -a -m 'a new beginning'
git push
- 将 january_dev2 重命名为 january_dev:
git branch -m january_dev2 january_dev ; git push origin january_dev ; git push origin -u january_dev ; git push origin --delete january_dev2
然后我会丢失我提交的整个历史记录,但我不关心也不需要它们。
你怎么看?
Here is the branch called X. And now here I am in the branch called Y, which is based on X. Please see what the differences are, commit them in a single commit and then update the origin as well.
git switch Y
– 切换到您要保存的分支(您已经这样做了,但以防万一)。git switch -c tmp
– 创建一个名为tmp
的新临时分支以防万一。git reset X
– 将tmp
分支指向与X
相同的提交,同时保留分支Y
. 的工作树
git add . && git commit
– 在一次提交中记录X
和Y
之间的所有更改。
所以现在您的 X
和 Y
分支保持与以前相同的状态,但是,此外,您还有一个名为 tmp
的新分支,它本质上是 X
+ 一个包含 X
和 Y
.
从你的描述中不清楚你想把什么推到哪里,但是,根据你的需要,你现在可以做git branch -f X
或git branch -f Y
来相应地改变,您的 X
或 Y
分支与 tmp
相同。然后,您只需 switch
一如既往,push
随心所欲。完成后,您可以git branch -D tmp
.