重新启动分支而不检查它

时间:2014-04-06 04:00:55

标签: git rebase

所以我正在开发一个有时候构建时间很长的项目,并且构建经常被破坏。如果我有一个旧的分支正在进行一些工作(已经提交,但是基于较大的父级),运行git checkout oldbranch会更改工作目录以表示所有旧代码,这使我需要运行一个完全重建。

但是,通常我只修改了一个或两个文件,其余文件不需要重置。我想做的是将此分支重新绑定到当前主头,并将这些更改保留到文件中。

基本上,如果修改了a.rsb.rs,那么我需要一种方法让这些更改基于当前头部,而不会触及除这两个以外的任何文件。

这样做有什么好办法吗?目前我正在处理补丁文件来执行此操作。

4 个答案:

答案 0 :(得分:2)

这听起来像是git cherry-pick的一个很好的用例。您可以保留当前分支并从旧分支中选择提交,而不是检查分支并将其重新定位到当前分支。

如果你挑选的分支只包含一个提交,你甚至可以用它的分支名称来引用它,例如:

git cherry-pick old-branch

即。从 old-branch 获取最新的提交并应用更改以在当前分支上创建新提交(保留提交消息,作者等)。

答案 1 :(得分:2)

现在我经历了一次相同的学习,git rebase允许您一次指定两个分支,实际上使之成为git rebase <remote> <local>,例如。

git rebase origin/master dev

这将执行更有效的重新设置,在此情况下,文件不会全部被重写(如果您先签出分支,便会出现这种情况)。您仍然仍然需要先解决合并冲突,最后得到一个存储库,在该存储库中检出了本地dev分支。

答案 2 :(得分:0)

克隆回购,在克隆副本中制作rebase,并将其推回。

如果你在你的回购中,它应该是:

cd ..
git clone <name_of_your_repo_directory> tmp_repo
cd tmp_repo
git checkout origin/oldBranch
git rebase origin/master
git push -f origin HEAD:oldBranch

在tmp_repo origin中是您本地仓库的名称,当然(您克隆的那个)。

注意:效果将是如

git checkout oldBranch
git rebase master

在原始仓库中,

git checkout oldBranch
git rebase origin/master

答案 3 :(得分:0)

我检查了源代码,不幸的是它看起来像 it always checks out the base commit 所以不幸的是,我认为你能做到这一点的唯一方法是将 repo 克隆到另一个目录,在那里重新设置它,然后将更改推回原repo,最后删除。

请注意,将本地存储库克隆到同一文件系统上的其他位置会使用 .git 下文件的硬链接,因此实际上并没有您想象的那么慢。