77

リモートの reflog を表示することはできますか? git reflogつまり、別のリモート マシンでの の出力を知りたいのです。

注: リモート追跡ブランチ (origin/master など) のreflogを求めているわけではありませreflogん。

4

3 に答える 3

59

リモート マシンが github リポジトリである場合は、

  1. まず、Github の Events API を使用してコミット SHA を取得します。
    curl https://api.github.com/repos/<user>/<repo>/events

  2. どのブランチにも存在しなくなった孤立した commit-idの SHA を特定します。

  3. 次に、Github の Refs API を使用して、孤立したコミットを指す新しいブランチを作成します。

    curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X POST -d '{"ref":"refs/heads/D-commit", "sha":"<orphan-commit-id>"}' https://api.github.com/repos/<user>/<repo>/git/refs

    <orphan-commit-id>上記のコマンドの を、手順 2 で特定した SHA に置き換えます。

  4. 最後にgit fetch、新しく作成されたブランチをローカル リポジトリに追加します。
    そこから、コミットをチェリーピックまたはマージして作業に戻すことができます。

実際の例については、この記事を参照してください。

于 2016-02-08T15:56:20.903 に答える
48

答えは基本的に「いいえ」です(そのマシンを除く)。reflogは、ローカルで行われたref-nameの再割り当てのログであるためです。git update-ref -m msg <name> <target>基本的に、更新を実行するたびにログが記録されます... local: .git/logs/<name>gets a line append:

$ git update-ref -m foo HEAD HEAD^
$ tail -1 .git/logs/HEAD
2418b6ba8fd0289933c9351260a272b8e410867f 8d945134b0cead535d66af29c8eb4228b5dc3763 [redacted] <[redacted]> 1334106483 -0600     foo

(この場合foo、メッセージの前のものは、スペースではなくタブです。SO の目的で拡張しました)。概念的には、ブランチ ヒントを移動する他のすべてがそれを実行するために呼び出さgit update-refれます (一部はシェル スクリプトであり、文字通りそれを実行し、他のものはすべてのファイル更新を実行する C コードを呼び出すだけです) ...そしてすべてのもの.git/logsが reflog を構成します。

基になる git:// および/または ssh:// プロトコルに reflog を取得できるものがあれば、それは可能ですが、私が知る限り、そうではありません。

于 2012-04-11T01:17:04.187 に答える
6

GitHub で、マージされた変更を取得する前にマスターで誤って実行しgit push --force、その間にマージされたブランチが削除された場合 (そうです、私に起こりました)、マージされたプル リクエストを探して [コミット]セクションに移動できます。例えば:

ここに画像の説明を入力

次に、最後のコミットに進み、<>ボタンをクリックします (「履歴のこの時点でリポジトリを参照する」というタイトルが付いています)。

これにより、履歴の「削除された」ポイントに到達します。ここから、次のことができます。

  • 新しいブランチを作成してから、新しいプル リクエストを開きます (変更が別のリポジトリからのものである場合に推奨されます)。
  • 新しいプル リクエストを開きます (リポジトリ内のコミットに推奨)。
于 2017-05-03T19:42:54.180 に答える