39

GitHubでGistを作成しましたが、誰にも見られたくない情報を見ました。それ以来、ファイルを更新しましたが、誰でもファイルの古いリビジョンにアクセスできます。

要旨を削除する以外に、その特定のリビジョンを確実に削除する方法はありますか?

そのような問題を抱えているのは私だけではないことがわかりました(Git:単一のリモートリビジョンを削除します)が、リビジョンを削除することはできませんでした。ここに示されているプロセスは、いくつかのファイルを削除するのに役立つようです。リビジョン全体を削除したい。

4

5 に答える 5

35

Github には、機密データの削除に関するヘルプ ページがあります。

http://help.github.com/removing-sensitive-data/

Gist は単なる git リポジトリであるため、gist をローカルで複製し、そこでクリーンアップを行い、強制プッシュを実行して、クリーンアップされたリポジトリで github バージョンを上書きできるはずです。

はい、それについて考えた後:<commit>「削除」したいコミットがある場合は、実行してください

 git rebase -i <commit>^

<commit>asの行をマークしedit、保存して終了します。

git は作業ディレクトリをコミット後の状態に設定します<commit>。ファイルを修正し、 と を使用git addgit commit --amendてコミットを修正します。次に、実行しますgit rebase --continue。次のコミットが機密データを削除することだけだった場合、修正されたコミット後に変更が含まれていないため、おそらく自動的に削除されます。

次に、git push -f更新を強制するために a を実行します (現在は早送りではなく、既に公開されている git 履歴を変更するため)。

于 2011-05-06T13:58:00.377 に答える
26

受け入れられた答えは良いですが、従うのは少し難しいです。これは同じ答えですが、少し甘いです。

Tilman Vogel が言うように、gist は単なるリポジトリであるため、このアプローチは github リポジトリと gist で機能します。

表示したくないパスワードを含むバージョンが 1 つだけあるとします。パスワードを削除して新しいバージョンをチェックインしましたが、以前のバージョンを削除したいと考えています。パスワードを示すコミットが多数ある場合は、このプロセスを適応させることができるはずです。

まず、ローカル マシンで修復を行う必要があります (github ではありません)。これを行うには、gist をローカルに複製することから始めます。プライベート クローンの URL をクリックすると、github の Gist のページにプライベート クローンの作成方法が表示されます。何かのようなもの:

git clone git@gist.github.com:421xxx1.git gist-421xxx1

これにより、リベースする必要があるローカル コピーが得られます (つまり、バージョンをいじくり回します)。

cd gist-421xxx1
git rebase -i eexxaa^

eeccaa は、パスワードを含む (最初の) バージョンです。この番号は、gist ページのリビジョン列から取得できます。^ は必須です。このコマンドは、バージョンを eexxaa から最新のものにインタラクティブに変更させてくださいという意味です。このコマンドは、レポ内の各バージョンの各行にコマンドが入力されたエディターを開きます。デフォルトのコマンドは 'pick' で、'このバージョンを使用または保持する' という意味です。

エディターの最初の行は次のようになります。

pick eexxaa    <- the version with the password
pick ffxxbb    <- the first version without the password

これをに変更

pick eexxaa    
squash ffxxbb 

つまり、パスワードのないバージョンでは、'pick' という単語を 'squash' に変更します。これにより、新しい (パスワードのない) バージョンを古い (パスワードを保持している) バージョンに押しつぶし、基本的にバージョン eexxaa を削除するようにリベースに要求します。明らかに、あなたのバージョンは eexxaa または ffxxbb 以外になります。どこでも eexxaa または ffxxbb を文字通り使用しないでください。

@kandが指摘squashしているように、パスワードを含むすべてのバージョンを使用する必要があります。

エディターで保存して終了します (vi :x の場合)。リベースは、2 つのバージョンのコミット メッセージを表示し、1 つの結合されたコミット メッセージを要求する新しいエディターを開く必要があります。要旨の場合、これらのメッセージは空である可能性が非常に高いですが、ここに何かを入れる必要があります。そうしないと、リベースが中止されます。メッセージを入力し、保存して終了すると、リベースが完了するはずです。

これで、パスワードを含むバージョンのないリポジトリができました。これを要点に戻すには、次を使用します。

git push -f

これにより、変更が github リポジトリに強制的に適用されます。更新をクリックすると、右側のリビジョン列から問題のあるバージョンが削除されたことをブラウザーで確認できるはずです。

それでおしまい!

于 2012-12-05T11:32:59.243 に答える
2

リポジトリから何かを完全に削除したい場合は、git filter-branch を使用する必要があります。

http://git-scm.com/docs/git-filter-branch

于 2011-05-06T13:54:56.733 に答える
0

meesernの答えに追加します。squash または fixup と rebase--continue を実行しようとすると、コメントまたは--allow-empty-message. これには時間がかかり、どういうわけか私のコミットはそのようにして要点のリビジョンリストから消えませんでした。

もっと簡単な解決策を見つけました。リベースの to-do リスト、、、および で不要なコミット行を削除する:wq!だけgit rebase --continueですgit push -f

于 2016-06-21T12:16:11.610 に答える