主頁 > 企業開發 > 命令“gitstatus”列出比“gitlog”更多的提交

命令“gitstatus”列出比“gitlog”更多的提交

2021-12-15 01:59:39 企業開發

我在一個主題分支中做了一些作業,在完成作業之前進行了兩次中間提交。然后我回到 master 并合并了我的主題分支。我習慣與 合并--no-commit,所以我可以在提交之前檢查一切是否正常,但這是一個快進,我沒有用 --no-ff 阻止它。現在“git status”告訴我有 5 個提交要推送,但“git log”只顯示 3 個——我在主題分支上所做的提交數量:

$ git status
On branch master
Your branch is ahead of 'origin/master' by 5 commits.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean
$ git log
commit f4474af2add220b1c2f0bf07d92f5035cef622ef (HEAD -> notifiche, master)
Author: Francesco Marchetti-Stasi <f.marchettistasi@***>
Date:   Fri Dec 10 14:55:48 2021  0100

    [...]

commit b63a44f7c1266a53a0e5c91a3395fc9eb75d9bd2
Author: Francesco Marchetti-Stasi <f.marchettistasi@***>
Date:   Tue Dec 7 16:46:59 2021  0100

    [...]

commit beb5d335e0ac35184b6a8e78bf45627e705a2a9b
Merge: 1f16a0d 025f660
Author: Francesco Marchetti-Stasi <f.marchettistasi@***>
Date:   Tue Dec 7 16:46:18 2021  0100

    [...]

commit 025f660ebc22b2d3bee00c691657c6e7318fcf50 (origin/master, origin/HEAD)
Author: Francesco Marchetti-Stasi <f.marchettistasi@***>
Date:   Tue Dec 7 11:44:48 2021  0100

    [...]

commit 1f16a0dcd96862b0ca75d3f3ca896ad755ccf29e
Author: Francesco Marchetti-Stasi <f.marchettistasi@***>
Date:   Thu Nov 25 09:38:21 2021  0100

    [...]

這是正常的嗎?是否有一些我沒有看到的“隱藏”提交?

在您的回答中,請考慮我可能需要推送我的提交,但我想這不應該改變本地提交歷史,對嗎?

編輯:回復 Lasse V. Karlsen 問題:

$ git log --format="%h %d"
8059943  (HEAD -> master)
b63a44f
beb5d33
025f660  (origin/master, origin/HEAD)
1f16a0d
0bd94aa
1e9d375  (dizione_e_sede)
c19c33a
c2bc958
d1801c3
1dd9a87
e4f0846
2091d2e  (origin/conv_pdf)
84076f3
[...]
$ git log --format="%h %d" origin/master..master
8059943  (HEAD -> master)
b63a44f
beb5d33
1f16a0d
0bd94aa
$

在服務器上,我看到以下內容:

命令“git status”列出比“git log”更多的提交

將滑鼠懸停在紅色圓圈 X 上時,會出現一條訊息“管道:失敗”。

我還應該提到,我們將 gitlab 服務器從一個非常舊的版本升級到 14.4.1,就在這些提交的中間——這可能是相關的嗎?...

uj5u.com熱心網友回復:

嘗試從 CLI(命令列)使用:

git log --oneline --decorate --graph --all

或者如果您有 GUI(在 Windows 或 Linux 或 Mac 上):

gitk --all

這將使您能夠以更具視覺吸引力的方式查看歷史。我相信這就是你要找的。

uj5u.com熱心網友回復:

這是正常的。git status顯示您提前五次提交命令是正確的(Git 中的模錯誤,這相對罕見)。git log您看到輸出也是正確的,但包含一種微妙的謊言:

commit f4474af2add220b1c2f0bf07d92f5035cef622ef (HEAD -> notifiche, master)
Author: Francesco Marchetti-Stasi <f.marchettistasi@***>
Date:   Fri Dec 10 14:55:48 2021  0100

    [...]

commit b63a44f7c1266a53a0e5c91a3395fc9eb75d9bd2
Author: Francesco Marchetti-Stasi <f.marchettistasi@***>
Date:   Tue Dec 7 16:46:59 2021  0100

    [...]

commit beb5d335e0ac35184b6a8e78bf45627e705a2a9b
Merge: 1f16a0d 025f660

git log顯示提交時,它使用使用優先級佇列的相當復雜的內部演算法來實作。這處理了提交圖是 DAG 而不是簡單樹的事實。特別是合并提交會導致棘手的遍歷。

請注意,此處串列中的第三個提交實際上是一個合并提交,有兩個父項:(1f16a0d縮短)和025f660(也縮短)。

以線性化順序顯示下一個提交git log是:

commit 025f660ebc22b2d3bee00c691657c6e7318fcf50 (origin/master, origin/HEAD)
Author: Francesco Marchetti-Stasi <f.marchettistasi@***>
Date:   Tue Dec 7 11:44:48 2021  0100

025f660:這是合并第二個父級這是origin/master命名的提交

之后git log顯示的提交是: 025f660

commit 1f16a0dcd96862b0ca75d3f3ca896ad755ccf29e
Author: Francesco Marchetti-Stasi <f.marchettistasi@***>
Date:   Thu Nov 25 09:38:21 2021  0100

這是該合并第一個父級。它顯示在之后而不是之前的原因是它的時間戳(11 月下旬)早于025f660(同年 12 月 7 日)的時間戳

至少在我看來,如果我們畫個圖,這一切就更清楚這里就是你看到的,我在那里已經取代每次提交一個簡單的大丑散列ID的區域圖形o*

...--●--o--o---*--o--o   <-- master
      \       /
       ●-----●   <-- origin/master

標記的提交*是合并提交。哈希 ID 已被黑色圓圈替換的提交兩個分支上其他提交僅在master. 有四個開放的圓圈和一個帶星號的合并,所以有五個提交master不在origin/master.

可以通過多種方式繪制此圖:1使用git log --graph, 或git log --graph --oneline,將使 Git 為您繪制一張,垂直方向,最新提交位于頂部。因為git log輸出一次提交一個,任何提交的序列包括圖表,但確實包括合并提交,當它暗示一個簡單的線性提交鏈時,一定是某種謊言(遺漏或傭金,取決于您喜歡什么以及您如何看待它)。那是因為合并提交將一些原本分開但并行的鏈聯系在一起。log 命令必須遍歷鏈的兩側,或省略鏈的一側,無論您告訴它做出何種選擇,結果要么是不完整的(“只遍歷第一父鏈接”)要么不正確 - 或 -根據您的觀點不完整。


1這是另一種繪圖,我認為,在大多數情況下,它使情況更加清晰,盡管git log --graph根本不會繪制這樣的東西:

       o--o
      /    \
...--●      *--o--o   <-- master
      \    /
       ●--●   <-- origin/master

這就是我喜歡布置我的圖紙的方式,以展示我的git merge作業原理。


Optional reading: some further details

The git log algorithm uses a priority queue.

The code begins by seeding the queue with one or more starting point commits (if there are no starting point commits, git log does nothing, but the default is to use the HEAD commit, and HEAD almost always specifies a commit: the exception is when you are on a branch that does not exist, which Git calls an orphan branch or an unborn branch—Git is not consistent about which term it uses). That is:

git log

inserts the HEAD commit (only) into the queue, while:

git log --branches

inserts all branch-tip commits into the queue, and:

git log master origin/master

inserts the commits identified by the names master and origin/master (this may be one single commit, if both names select the same commit, or two separate commits as in your case).

Because the queue is a priority queue, if it contains more than one entry, the "front" entry is the one with the highest priority. This is controlled by various options to git log, such as --date-order, --author-date-order, or --topo-order, but the default is to use the committer timestamp (which is not shown by default: the dates you see here are author dates; but fortunately most commits have the same author and committer date), with the latest timestamp—the most recent commit—having the highest priority.

If the queue has only one entry, of course, that one entry has the only priority, which is therefore the highest, average, and lowest priority all at the same time. So that's a degenerate case—but an important one since very often, there's only one entry in the queue. For instance, that's the case for your git log, which inserts just the HEAD commit, which is also the master commit.

The log code now runs a loop:

  • while the queue is not empty
    • remove the front entry (a commit)
    • decide whether to show this commit
      • if so, show it (there's a special bit of weirdness with --reverse here though)
    • decide which parent(s) if any to insert into the queue

The defaults for the two "decide" steps are: yes, do show it; insert all parents.

大多數提交只有一個父提交,因此對于第一個提交——由HEAD和和notifiche標識master——回圈顯示一個提交,用兩個分支名稱“裝飾”,并插入它的一個父提交b63a44f7c1266a53a0e5c91a3395fc9eb75d9bd2

佇列現在有一個提交,所以回圈運行并顯示第二個提交。那個提交沒有名字——沒有分支識別符號,沒有標簽等等——所以我們只看到那個提交,沒有(origin/master)或任何東西。父級也有一個父級,因此一個父級進入佇列:我們現在在beb5d335e0ac35184b6a8e78bf45627e705a2a9b,這是合并提交。

佇列現在有一個提交,所以回圈運行并顯示第三個提交。這個提交有兩個父級,1f16a0d025f660. 它們都被插入到優先佇列中。

現在我們點擊優先級代碼:佇列有兩個條目。其中之一在前面。git log代碼中抽取一個。它是第二個父級,但它具有更高的優先級,因為它具有較晚的提交者時間戳。

git log現在的代碼顯示了這個承諾,這稱為一個名字,origin/master所以現在你看到的誤導性輸出。該提交有一個父項,它進入佇列,佇列中繼續有兩個元素。

這種模式一直重復,直到通過合并向后隱含的分支本身得到解決。一旦有只有一個承諾是佇列中,我們回到正常的單執行緒的步行路程。(使用--topo-order確保盡快發生這種情況,并--graph暗示--topo-order.)

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/380603.html

標籤:混帐

上一篇:是否可以將Gitlab版本遷移到Github存盤庫?

下一篇:如何手動指定gitcommitsha?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more