Git - 只将最近的提交推送到github

时间:2010-02-16 22:01:28

标签: git github

在我当地的git repo上,我有很多提交,包括'秘密'连接字符串: - )

当我把它推到那里时,我不希望这个历史在github上。

基本上我想推动我拥有的一切,但想要摆脱一大堆历史。

也许我会更好地在我的所有开发人员的分支中运行,然后在提交之前合并回master ...然后master的历史将只是我想要的提交。

我尝试过运行rebase:

git rebase –i HEAD~3

返回3次提交,然后我可以删除提交。

然而遇到自动樱桃选择失败了,它变得相当复杂。

任何想法都非常感激......历史可以没什么大不了的,如果这太难了就重新开始: - )

2 个答案:

答案 0 :(得分:57)

您可以分支当前的工作,回放主人,然后挑选最新的提交给主人:

git branch secret
git reset --hard HEAD~3
git cherry-pick secret

在图片中,

    A--B--C--D--E (master)
git branch secret之后

    A--B--C--D--E (master, secret)
git reset --hard HEAD~3之后

    A--B (master)
        \
         C--D--E (secret)
git cherry-pick secret之后

    A--B--E' (master)
        \
         C--D--E (secret)

最后,如果你git checkout secret; git rebase master,你可以得到:

    A--B--E' (master)
           \
            C--D (secret)

答案 1 :(得分:3)

方案

你克隆了一个项目并为一个新功能做了大量的提交,现在是开源或分享它以供审查的时候了。你不希望任何人看到你的提交混乱!

原始分支是half.each { |x| array << x count+=1 },您的杂乱提交位于;分支上,您希望在 half.each { |x| array << x; count+=1 } 分支上发布您的干净工作。

假设以下提交:

在分支{ "site": { "listing":{ "nbpage":10, "lengthcorps":320 }, "detail":{ "sim":{ "active":true, "nb":10 } }, "tri":{ "default": { "type":"item", "sens":"item" }, "options": ["options1","options2"] }, "cc": { "nb": 0, "active":1 }, "hasreferencement":false } } 上:

  

SHA0:实施X和Y.(作者:authorA)
  SHA1:已实施Z.(作者:authorA)
  SHA2:已实施W.(作者:authorA)

您创建了export interface site { model: string; listing:listing; detail:detail; contact:contact; tri:tri; cc:cc; hasselection?:boolean; hasreferencement?:boolean; } export interface listing { nbpage?:number; type?:number; lengthcorps?:number; } export interface detail { type?:number; sim?:sim; lengthcoprs?:number; gallery?:boolean; } export interface tri { default?:defaulttri; options?:string[]; } export interface cc { nb?:number; active?:number; } export interface sim{ active?:boolean; nb?:number; } export interface defaulttri{ type?:string; sens?:string; } 分支并推送了一些提交:

  

SHA3:尝试实现Q功能。
  SHA4:狗屎,我不工作   SHA5:搞砸了! :(
  SHA6:GOT工作!!!!
  SHA7:清理!

将所有这些更改放在 <ul *ngFor="let item of uploadFile.site | JsonPipe3; let i=index"> <li>{{ item.key }} => {{item.value }}</li> </ul> export class JsonPipe3 implements PipeTransform { transform(value, args:string[]) : any { let keys = []; let keys2 =[]; for (let key in value) { keys.push({key: key, value: value[key]}); /* if(this.isAnyObject(value[key])){ for (let key2 in value[key]) { keys2.push({key: key2, value:value[key2]}); } } */ } //return [keys,keys2]; return keys; } isAnyObject(value) { return value != null && (typeof value === 'object' || typeof value === 'function'); } }

中的单个提交中
cloned_branch

结果:

分支devpublic_branch保持不变,而cloned_branch分支包含:

  

SHA0:实施X和Y.(作者:authorA)
  SHA1:已实施Z.(作者:authorA)
  SHA2:已实施W.(作者:authorA)
  SHA8:已实施Q.(作者:我)