我正在计算机上的develop分支上工作。我做了很多我不想推动的改变,但我想保留它们。 我所做的是改变我的项目上的翻译行为,我想在推送它并将其部署到生产之前再测试一下。 但我想继续致力于开发或任何其他分支机构,并能够应用这些变化。
我想出了一些想法:
保留所有这些文件(不要git-add)并只提交我实际想要提交的文件。但这个解决方案使我的#git status"非常混乱(许多修改过的文件),我相信它会产生错误并导致提交错误的文件。
Git stash save"翻译"并在我想使用它时应用它。但是我会有一个混乱的git状态同样的问题,我将不得不选择我想要提交的文件中的哪一个。
使用我的新功能创建一个新分支,但只要我将它合并到我的工作分支,我将同时提交合并
您是否知道任何其他工作流程以保留大量文件的更改列表并应用/删除这些更改?
答案 0 :(得分:0)
像git-flow或gitlab-flow这样的东西很适合。
根据我的阅读,我可以得出结论,您的项目包含2个模块,您可以修改它们。
一个模块是稳定的,但无论如何你已经对它进行了修改,并希望更彻底地测试你的修改,另一个模块正在进行中。
我会使用您的第三个变体,但将您的工作分支合并到您的新功能分支。
或者,如果您想将修改分离为“稳定”模块,可以将它们保存在单独的分支中。
也就是说,你得到3个分支:
使用git进行分支既便宜又简单,您可以创建任意数量的分支。
答案 1 :(得分:0)
您可以将主要的本地分支rebase放到跟踪远端分支的中间分支上。然后,您通过cherry-pick报告您从主要本地分支到跟踪的提交,然后将您的主本地重新绑定到更新的跟踪分支。
答案 2 :(得分:0)
将本地未完成的工作保留在单独的分支上并推送它。
部署通常发生在一个分支上。只要您不将更改合并到该分支中(尽管您需要在您的位置验证这一点),您就是安全的。
答案 3 :(得分:0)
我会建议另一个想法。
创建不同的提交
仅推送特定提交给主人
在需要时推送另一个提交,以便您的git状态不会变得混乱。(my $FROMduplicate="";
my $JOINduplicate="";
foreach my $Statement (@FileStatements) {
if ($Statement!~m/create/i) {
next;
}
if ($Statement=~m/create user |^GRANT |^spool /gim) {
next;
}
my $name="";
my $type="";
my $content="";#FileStatements
my @parents=();
my @children=();
my $duplicate="";
# print $Statement."\n";
#NAME--------------------------------------------
my $catch = (split(/ view | trigger | table | synonym | procedure | role /i, $Statement))[1];
$catch =~ s/^\s+//;
$name = (split(/\s+/, $catch))[0];
if ($name=~m/undef/gi){next;}
#DEBUG #print "$name\n";
#TYPE--------------------------------------------
if( $Statement=~m/^create or replace \w+ /i) {
my $tmp = (split(/ replace /i, $Statement))[1];
$tmp =~ s/^\s+//;
$type = (split(/\s+/, $tmp))[0];
}
else{
my $tmp = (split(/^create /i, $Statement))[1];
$tmp =~ s/^\s+//;
$type = (split(/\s+/, $tmp))[0];
}
if ($type=~m/undef| undef |\s+undef\s+|\s+undef,/) {
next;
}
#print "$type\n";
#CONTENT-----------------------------------------
#PARENTS-----------------------------------------
my @froms = split(/ from\s+/i, $Statement);
my @joins = split(/ join /i, $Statement);
foreach my $i (1..@froms-1) {
#print Writer1 "$froms[$i]"."\n\n";
my $from = (split(/ where |select | left | left | right | as /i, $froms[$i])) [0];
$from=~s/^\s+//;
$from=~s/\(+//;
my @Spaces = split(/, | , /,$from);
foreach my $x (0..@Spaces-1) {
my $SpaceFrom = (split(/ /,$Spaces[$x])) [0];
$SpaceFrom=~s/;//;
$SpaceFrom=~s/\)+//;
# print Writer1 $SpaceFrom."\n\n";
if ($SpaceFrom eq $FROMduplicate) {
next;
}
push(@parents,$SpaceFrom);
$FROMduplicate=$SpaceFrom;
}
}
foreach my $x (1..@joins-1){
#print "$joins[$i]"."\n\n";
my $join = (split(/ on /i,$joins[$x])) [0];
$join = (split(/ /i,$joins[$x])) [0];
#print Writer "\n\n".$join."\n\n";
if ($join eq $JOINduplicate) {
next;
}
push(@parents,$join);
$JOINduplicate=$join;
}
@parents = do { my %seen; grep { !$seen{$_}++ } @parents };
#check hash for existence
if(exists$hashmap{$name}){
push(@{$hashmap[3]},@parents);
push(@{$hashmap[0]},$name);
push(@{$hashmap[1]},$type);
push(@{$hashmap[2]},$Statement);
}
my @hashvalues=($name,$type,$Statement,\@parents,\@children);
$hashmap{$name}=\@hashvalues;
# push(@children,$hashmap{$name}) if( exists$hashmap{$name})
}
}
)
此处已说明该程序:
How can I push a specific commit to a remote, and not previous commits?
答案 4 :(得分:0)
选择第3个选项,为您的功能创建一个新分支。
在您准备好之前,您不必将其合并到开发中 - 将 develop 合并到功能中,只要您想要测试更改。
答案 5 :(得分:0)
我使用的一个解决方案是拥有第二个远程存储库,其中包含我不想在第一个存储库中使用的分支和提交。
您必须小心确保将其推送到正确的存储库,但这听起来确实可以满足您的情况的需求。