2012-04-10 135 views
39

是否可以查看遠程的reflog?也就是說,我想知道git reflog在另一臺遠程機器上的輸出是什麼。git我可以查看遠程的reflog嗎?

請注意,我不是要求遠程跟蹤分支(例如origin/master)的reflog,我要求reflog表示在另一臺機器上。

+1

如果您有權訪問遠程系統的文件系統(通常是裸回購),那麼您始終可以選擇在那裏運行git reflog。但有這樣的訪問通常是不可能的。我有一個在git服務器(使用只讀文件共享)上做到這一點的習慣,只是爲了能夠在服務器端查看reflog。 – 2014-07-30 11:51:51

回答

26

答案基本上是「否」(該機器除外),因爲reflog是一些本地製作的某些ref-name重新分配的日誌。從本質上講,每次運行git update-ref -m msg <name> <target>更新記錄...本地:.git/logs/<name>獲得附加的行:

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

(該消息之前的事情,在這種情況下foo,是不是空間,而是一個標籤,我爲了SO目的而擴展它)。從概念上講,其他所有移動分支提示的東西都會調用git update-ref來完成它(有些是shell腳本,並且確實是這樣做的,其他的只是調用執行所有文件更新的C代碼)...並且在.git/logs中的所有內容都構成了reflog。

如果在底層的git://和/或ssh://協議中有東西讓你得到reflog,那就做到了,但據我所知沒有。

22

上關的機會,遠程機器是GitHub的倉庫,

  1. 首先使用GitHub的事件API來檢索提交SHA。
    curl https://api.github.com/repos/<user>/<repo>/events

  2. 確定孤立的SHA提交-ID,在任何一間分行不再存在。

  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

    在上面的命令,在步驟2中

  4. 最後git fetch新創建的分支識別到你的本地庫的SHA替換<orphan-commit-id>
    從那裏你可以選擇或合併提交到你的工作。

查看this article爲一個實際的例子。

+4

非常感謝!對於那些不太傾向於使用命令行,也可以旁路步驟3通過剛剛打開https://github.com/ / /提交/ <孤兒提交-ID>,並從它直接在創建一個新的分支「樹:」下拉菜單。然後只需正常取回。 – waldyrious 2016-09-15 07:45:02

+0

如果您收到「」消息「:」未找到「錯誤,則表示您需要驗證通過傳遞一個access_token查詢字符串。 – 2017-03-07 06:39:36

+0

對於我來說,追蹤孤立提交id的* SHA最簡單的方法是查看CircleCI上的最後一個構建(或[在此處插入CI服務])。 – samjewell 2017-03-24 13:57:45

2

在GitHub上,如果您在獲取合併的更改之前錯誤地在主服務器上執行了git push --force並且在此期間合併的分支被刪除(是的,它發生在我身上),您可以查找合併的請求並轉到到提交部分,例如:

enter image description here

然後你走在最後一次提交,然後單擊<>按鈕(即有標題爲「在這一歷史時刻瀏覽存儲庫」)。

這將帶您到歷史的「刪除」點。從這裏你可以:

  • 創建一個新的分支,然後打開一個新的拉請求(建議如果更改來自另一個存儲庫)。
  • 打開一個新的拉動請求(建議提交您的倉庫裏)。
相關問題