<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>Git Graph · Nhân Tài Đức</title>
    <link>https://jared.lynskey.co.nz/vi/tags/git-graph/</link>
    <description>Những câu chuyện ngắn về kỹ thuật phần mềm và lãnh đạo đội ngũ kỹ sư — performance review, tuyển dụng và mở rộng team, CI/CD, giám sát DevOps và AI agent. Viết từ Seoul.</description>
    <generator>Hugo</generator>
    <language>vi</language>
    <copyright>© 2026 Nhân Tài Đức</copyright>
    <lastBuildDate>Wed, 28 Oct 2026 00:00:00 +1300</lastBuildDate>
    <atom:link href="https://jared.lynskey.co.nz/vi/tags/git-graph/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Xem git graph trong terminal và VS Code: theo dõi tiến độ mà không quản lý vi mô</title>
      <link>https://jared.lynskey.co.nz/vi/posts/2023/2023-06-02-project-progress-git-graph/</link>
      <guid isPermaLink="true">https://jared.lynskey.co.nz/vi/posts/2023/2023-06-02-project-progress-git-graph/</guid>
      <pubDate>Fri, 02 Jun 2023 11:30:03 +0000</pubDate>
      <dc:creator>Jared Lynskey</dc:creator>
      <category>Git</category>
      <category>Git Graph</category>
      <category>VS Code</category>
      <category>Project Management</category>
      <category>Engineering Manager</category>
      <description>Cách xem git graph: lệnh git log --graph và alias cho nó, so sánh hai nhánh, các chế độ xem biểu đồ trong VS Code, rồi cách tôi dùng nó để nắm tiến độ mà không quản lý vi mô cả đội.</description>
      <content:encoded><![CDATA[<p>Cách nhanh nhất để xem git graph (biểu đồ lịch sử Git) là dùng cửa sổ dòng lệnh (terminal): lệnh <code>git log --graph --oneline --all --decorate</code> vẽ tất cả các nhánh thành những đường kẻ bằng ký tự, mỗi commit nằm trên một dòng, tên nhánh và tag hiện ngay cạnh commit mà chúng trỏ tới. Còn trong VS Code, bạn có thể dùng Source Control Graph có sẵn trong khung Source Control, hoặc cài tiện ích mở rộng (extension) Git Graph để có biểu đồ lớn hơn và bấm vào được. Cả hai cách đều được hướng dẫn chi tiết ở cuối bài.</p>
<p>Chẳng ai thích bị hỏi &ldquo;việc đến đâu rồi?&rdquo;, nhưng đã là người dẫn dắt dự án ở công ty thì tôi vẫn phải nắm được tình hình. Cách dung hòa của tôi là biểu đồ lịch sử Git (git graph): trước khi hỏi ai điều gì, tôi mở nó ra xem trước, và phần lớn thời gian câu trả lời đã nằm sẵn ở đó. Chỉ cần liếc qua là thấy được hoạt động commit, các nhánh được tạo ra và hợp nhất (merge) vào ra sao, mà chẳng ai phải ngồi họp vì chuyện đó.</p>

<h3 class="relative group">Biểu đồ thực sự nói lên điều gì
    <div id="biểu-đồ-thực-sự-nói-lên-điều-gì" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#bi%e1%bb%83u-%c4%91%e1%bb%93-th%e1%bb%b1c-s%e1%bb%b1-n%c3%b3i-l%c3%aan-%c4%91i%e1%bb%81u-g%c3%ac" aria-label="Cọc dấu">#</a>
    </span>
    
</h3>
<p><figure><span class="mc-img" style="--lqip:url('data:image/webp;base64,UklGRqoAAABXRUJQVlA4IJ4AAAAQBgCdASogABgAPw1yrE0mIyIhKAqoxiGJ5QC3uywCxQFpuHEPXSkTd6B0z2RWZa4T7Y8RfsruOsAA/vd8+2CpyheBOdEz3RjVNYlC9RtFoqjOvb/UUWB572vAmnOtzv/AnG5mtp9GYAzXQce5Jk69dXACVLuYiXixGTwngnNtwm/gJSEGWEDi7N2CT1vDSW68w98W/Qmb3QPw7xAAAA==')"><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="Biểu đồ lịch sử Git"
    width="2560"
    height="1920"
    src="https://jared.lynskey.co.nz/img/posts/gitgraphs/image_hu_4be8d7d2144dd617.webp"
    srcset="https://jared.lynskey.co.nz/img/posts/gitgraphs/image_hu_4be8d7d2144dd617.webp 800w, https://jared.lynskey.co.nz/img/posts/gitgraphs/image_hu_b6056380eece4a86.webp 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="https://jared.lynskey.co.nz/img/posts/gitgraphs/image_hu_1c52b3c34db54258.webp"></span></figure>
</p>
<p>Nếu bạn chưa từng nhìn kỹ loại biểu đồ này: mỗi nút là một commit, mỗi đường tách ra là một nhánh, và cả biểu đồ đọc lên giống như dòng thời gian của dự án. Cách trình bày này chứa nhiều thông tin hơn bạn tưởng:</p>
<ul>
<li>Liếc một cái là biết đang có bao nhiêu nhánh hoạt động và commit được đẩy lên đều đặn cỡ nào.</li>
<li>Một nhánh bỗng dưng im ắng, hay một nhánh mấy tuần rồi chưa hợp nhất, thường có nghĩa là ai đó đang bị kẹt. Đây là tín hiệu cảnh báo sớm rất đáng giá.</li>
<li>Tần suất hợp nhất cho bạn biết cả đội đang phối hợp với nhau thế nào. Hợp nhất thường xuyên nghĩa là phần việc của mọi người thực sự đang được ghép lại với nhau; còn nhánh tồn tại quá lâu thường là dấu hiệu có người đang làm một mình một cõi.</li>
</ul>

<h3 class="relative group">Ít làm phiền hơn, trao đổi chất lượng hơn
    <div id="ít-làm-phiền-hơn-trao-đổi-chất-lượng-hơn" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%c3%adt-l%c3%a0m-phi%e1%bb%81n-h%c6%a1n-trao-%c4%91%e1%bb%95i-ch%e1%ba%a5t-l%c6%b0%e1%bb%a3ng-h%c6%a1n" aria-label="Cọc dấu">#</a>
    </span>
    
</h3>
<p>Cái lợi dễ thấy nhất là tôi không phải làm phiền ai mới nắm được tình hình. Nhưng cái lợi lớn hơn nằm ở những lúc <em>thật sự</em> cần nói chuyện: cuộc trao đổi bắt đầu từ những gì biểu đồ cho thấy, chứ không phải từ phỏng đoán. &ldquo;Nhánh này đứng yên từ thứ Ba rồi, có gì đang vướng không?&rdquo; là câu mở đầu tốt hơn nhiều so với &ldquo;có gì mới không?&rdquo;</p>
<p>Nói rõ thói quen này cho mọi người biết cũng giúp ích. Tôi thường liếc nhanh vào hầu hết các buổi sáng, và xem kỹ mỗi tuần một lần. Cả đội đều biết nhịp đó, nên không ai bị bất ngờ.</p>

<h3 class="relative group">Đừng biến nó thành công cụ theo dõi nhân viên
    <div id="đừng-biến-nó-thành-công-cụ-theo-dõi-nhân-viên" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%c4%91%e1%bb%abng-bi%e1%ba%bfn-n%c3%b3-th%c3%a0nh-c%c3%b4ng-c%e1%bb%a5-theo-d%c3%b5i-nh%c3%a2n-vi%c3%aan" aria-label="Cọc dấu">#</a>
    </span>
    
</h3>
<p>Đây là điều tôi phải tự nhắc mình hoài. Số lượng commit không đồng nghĩa với giá trị: một commit chỉn chu có khi đáng giá hơn năm mươi commit lặt vặt. Thấy được mọi commit không có nghĩa là bạn có quyền chất vấn mọi quyết định. Hãy tin đội của mình, và chỉ nhảy vào khi thấy một xu hướng thật sự có vấn đề. Còn khi đem biểu đồ ra trong một buổi trao đổi, hãy dùng nó làm điểm khởi đầu để góp ý, chứ không phải làm bằng chứng để buộc tội ai.</p>

<h3 class="relative group">Xem biểu đồ trong terminal
    <div id="xem-biểu-đồ-trong-terminal" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#xem-bi%e1%bb%83u-%c4%91%e1%bb%93-trong-terminal" aria-label="Cọc dấu">#</a>
    </span>
    
</h3>
<p>Chỉ cần có Git là đủ, không phải cài thêm gì:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git log --graph --oneline --all --decorate</span></span></code></pre></div></div>
<p>Ý nghĩa của từng tùy chọn:</p>
<ul>
<li><code>--graph</code>: vẽ các đường nhánh và đường hợp nhất (merge) ở phía bên trái.</li>
<li><code>--oneline</code>: mỗi commit gói gọn trong một dòng, gồm mã hash rút gọn và dòng đầu tiên của thông điệp commit.</li>
<li><code>--all</code>: hiện tất cả các nhánh và tag, kể cả nhánh trên remote, chứ không chỉ nhánh bạn đang đứng.</li>
<li><code>--decorate</code>: in tên nhánh và tag cạnh commit mà chúng trỏ tới. Các bản Git gần đây đã tự làm việc này khi kết quả hiện ra terminal, nhưng thêm tùy chọn này thì khi bạn chuyển kết quả sang lệnh khác qua pipe, tên nhánh vẫn còn.</li>
</ul>
<p>Sáng nào cũng gõ nguyên câu lệnh dài như vậy thì mệt, nên hãy tạo một alias:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git config --global alias.graph <span class="s2">&#34;log --graph --oneline --all --decorate&#34;</span>
</span></span><span class="line"><span class="cl">git graph</span></span></code></pre></div></div>
<p>Với một kho mã (repository) đã chạy lâu năm, biểu đồ đầy đủ sẽ dài cuộn mãi không hết. Vài cách để thu gọn lại:</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git graph --since<span class="o">=</span><span class="s2">&#34;2 weeks ago&#34;</span>    <span class="c1"># chỉ hai tuần gần nhất</span>
</span></span><span class="line"><span class="cl">git graph -20                      <span class="c1"># chỉ 20 commit gần nhất</span>
</span></span><span class="line"><span class="cl">git log --graph --oneline main..feature                <span class="c1"># có ở feature, chưa có ở main</span>
</span></span><span class="line"><span class="cl">git log --graph --oneline --left-right main...feature  <span class="c1"># cả hai phía, đánh dấu &lt; và &gt;</span></span></span></code></pre></div></div>
<p>Hai dòng cuối dùng để so sánh hai nhánh. Ở đây tôi dùng <code>git log</code> thường chứ không dùng alias, vì alias có <code>--all</code> sẽ kéo tất cả các nhánh khác vào lại. Hai dấu chấm cho bạn thấy những gì <code>feature</code> có mà <code>main</code> chưa có. Ba dấu chấm kèm <code>--left-right</code> thì hiện cả hai phía, mỗi bên có gì mà bên kia không có, nên đây là cách nhanh để xem một nhánh tồn tại lâu đã đi lệch xa đến đâu.</p>

<h3 class="relative group">Xem biểu đồ trong VS Code
    <div id="xem-biểu-đồ-trong-vs-code" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#xem-bi%e1%bb%83u-%c4%91%e1%bb%93-trong-vs-code" aria-label="Cọc dấu">#</a>
    </span>
    
</h3>
<p>VS Code có sẵn biểu đồ. Mở khung Source Control (Ctrl+Shift+G), bạn sẽ thấy Source Control Graph là một phần trong khung đó; tính năng này có từ phiên bản 1.93 (tháng 8 năm 2024). Mặc định, biểu đồ chỉ bám theo nhánh hiện tại và nhánh remote tương ứng, nhưng bạn có thể thêm các nhánh khác bằng bộ chọn nhánh trên thanh tiêu đề của biểu đồ. Nếu chỉ cần liếc qua thì như vậy là đủ.</p>
<p>Muốn xem tất cả các nhánh cùng lúc thì cài extension Git Graph của tác giả mhutchie (tìm &ldquo;Git Graph&rdquo; trong khung Extensions). Bạn có thể mở nó bằng mục Git Graph trên thanh trạng thái (status bar), biểu tượng Git Graph ở đầu khung Source Control, hoặc lệnh <em>Git Graph: View Git Graph (git log)</em> trong Command Palette. Bấm vào một commit để xem các tệp đã thay đổi, hoặc bấm vào một commit rồi giữ Ctrl/Cmd bấm vào commit khác để so sánh hai commit với nhau. Extension này không có bản phát hành mới nào từ năm 2021, nên biết thêm cách dùng biểu đồ có sẵn của VS Code cũng không thừa.</p>
<p>Nếu không thấy nút Git Graph đâu, nhiều khả năng extension chưa tìm thấy repository nào. Theo mặc định, nó chỉ kiểm tra đúng thư mục bạn mở, không tìm vào các thư mục con. Hãy mở thẳng thư mục của repository, hoặc tăng giá trị <code>git-graph.maxDepthOfRepoSearch</code> trong phần cài đặt.</p>

<h3 class="relative group">Các công cụ khác
    <div id="các-công-cụ-khác" class="anchor"></div>
    
    <span
        class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
        <a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#c%c3%a1c-c%c3%b4ng-c%e1%bb%a5-kh%c3%a1c" aria-label="Cọc dấu">#</a>
    </span>
    
</h3>
<p>Hầu hết công cụ Git đều có biểu đồ ở đâu đó. <code>gitk --all</code> là trình duyệt lịch sử commit có sẵn của chính Git. GitHub, GitLab và Bitbucket đều có chế độ xem &ldquo;network&rdquo; hoặc &ldquo;graph&rdquo; ngay trong trang repository. Các ứng dụng desktop như SourceTree (miễn phí, của Atlassian), GitKraken, Tower và TortoiseGit trên Windows cũng đều vẽ được biểu đồ.</p>
<p>Chọn công cụ nào cũng được, mục tiêu vẫn chỉ có một: hiểu tiến độ, chứ không phải đi đếm commit.</p>
]]></content:encoded>
      <media:content url="https://jared.lynskey.co.nz/en/posts/2023/2023-06-02-project-progress-git-graph/featured.jpeg" medium="image" type="image/jpeg" />
    </item>
  </channel>
</rss>
