2017-03-10 25 views
1

我对存储库的本地克隆进行了一些更改,并将它们提交到本地分支。我们称这些更改为“提交A”。我想继续工作在提交A之上,但是当我准备好合并回主分支时,我不想提交合并。如何维护Git中本地和远程存储库之间的某些文件差异?

我在想我可以使用git rebase -i并删除提交A,但有没有办法让该提交保持活动状态,以便将来的工作可以在其上完成?然后,再次,工作合并回主分支没有承诺答:

我意识到我在做什么有点粗略,但在提交A中更改的行是正交于其上的工作。这些更改与机器(生产和测试)之间的差异有关,因为它们必须引用不同版本的第三方库。

回答

1

我在想我可以使用git rebase -i并删除提交A,但有没有办法让该提交保持活动状态,以便将来的工作可以完成?然后,再次,工作合并回主分支而没有承诺A.

您可以标记它。从分支中删除的提交不会消失。然后当你需要时,你可以选择标签。那就是:

git tag somename SHA1 
... 
git rebase -i OLDREV 
... 
git cherry-pick somename 
1

嗯,也许这:

创建两个分支,一个与试验的变化改变了PROD之一。然后你的工作流程将如下所示:

1) Pull updates 
2) Create a local working/topic branch 
3) Merge from Test branch 
4) Do your work, test, etc. 
5) When ready to push back, first merge from Prod branch 
6) Merge back into your main/develop/master branch 
7) Push 

这样做会工作吗?

1

我在这种情况下所做的是隐藏提交A中的更改(不提交它们)。这样,任何时候我想要处理这些变化时,我都会使用这个存储(见下文),但只要我不提交它们,我不必担心它们会以远程方式结束。如果A中更改的文件与您正在处理的文件不同,这是最简单的。

现在要设置它,假设A是分支上的最后一个提交。

git reset --soft HEAD~1 
git stash 

及更高版本:

git stash list 
git stash apply [email protected]{n} 

git stash list是找到n

+1

这会起作用,但有两个原因我不喜欢它个人。 (1)您必须小心,不要意外提交隐藏的更改,这可能会在工作流程的随机点创建额外的工作。 (2)我只是不喜欢长寿的积木;我想我不会在意如果我不使用短暂存放的相当一部分,但是因为我发现长期存放我的方式。但是ymmv –

1

之前,我给我的回答是:我会建议逼近问题的根源(需要在不同的机器上的不同代码)一种更正式的方式,因为我怀疑这最终会给你带来更多麻烦。根据语言和工具的不同,我认识到这可能并不容易(当然,如果不了解语言,工具等,我无法提供一个通用的解决方案),但您可能会觉得它值得。

但是,嘿,假设你目前的做法是要为你工作得很好,这里是你会怎么做坚持下去:

你开始这种情况

X --- X <--(origin/master) 
     \ 
     A --- B --- C <--(master) 

你要推的变化形成BC,但不是A;此外,您希望本地继续工作,基于ABC的所有更改。

为了让事情办得那样顺利,因为他们可以,你也想混帐认识到,从BC变化的照顾,这样以后(当你有D并希望将它),你不”最终导致一堆毫无意义的冲突解决。

所以首先做你的互动rebase;但不是删除A,而是将其移至TODO列表的末尾。此操作后,您应该

X --- X <--(origin/master) 
     \ 
     B' --- C' --- A' <--(master) 

(技术上A,B和C都还在闲逛,你可以回到他们,如果你需要,但如果一切顺利的话,你会不会需要)

现在你想要退回master上一个提交,按下,然后将master拉回到A'

git reset --hard HEAD^ 
git push 
git reset --hard [email protected]{1} 

产生

X --- X --- B' --- C' <--(origin/master) 
        \ 
         A' <--(master) 

进行,必要时重复

1

使用git rebase --onto变基的一切行动(但不包括)答rebase documentation具有匹配,使用--onto很好的例子你正在描述的场景。从本质上讲,你会做:

git rebase --onto master A 

如果您不希望当前分支被重建基础(因为你想保持它的工作之后),然后就检查出一个新的临时党支部第一:

git checkout -b new-temporary-branch 
git rebase --onto master A 

然后通过将主合并到主分支来快速转发新分支。

相关问题