{"id":314,"date":"2026-07-06T15:00:49","date_gmt":"2026-07-06T07:00:49","guid":{"rendered":"https:\/\/numsimlab.com\/?p=314"},"modified":"2026-07-06T15:00:49","modified_gmt":"2026-07-06T07:00:49","slug":"git-clone-%e4%b8%89%e7%a7%8d%e6%96%b9%e5%bc%8f-%e6%9c%ac%e5%9c%b0%e6%8f%90%e4%ba%a4%e4%bb%a3%e7%a0%81%e5%ae%8c%e6%95%b4%e6%b5%81%e7%a8%8b","status":"publish","type":"post","link":"https:\/\/numsimlab.com\/?p=314","title":{"rendered":"Git Clone \u4e09\u79cd\u65b9\u5f0f + \u672c\u5730\u63d0\u4ea4\u4ee3\u7801\u5b8c\u6574\u6d41\u7a0b"},"content":{"rendered":"\n<!-- Generated by Trae Work -->\n<!DOCTYPE html>\n<html lang=\"zh-CN\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Git Clone \u4e09\u79cd\u65b9\u5f0f + \u672c\u5730\u63d0\u4ea4\u4ee3\u7801\u5b8c\u6574\u6d41\u7a0b \u00b7 Clone &#038; Push Guide<\/title>\n<style>\n\/* ===== Reset & Base ===== *\/\n*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\nhtml { scroll-behavior: smooth; }\n\n:root {\n  --bg: #f8f9fa;\n  --bg2: #ffffff;\n  --ink: #1a1a2e;\n  --muted: #6c7086;\n  --rule: #e2e4eb;\n  --accent: #2563eb;\n  --accent2: #16a34a;\n  --accent3: #dc2626;\n  --accent4: #d97706;\n  --accent5: #7c3aed;\n  --card-bg: #ffffff;\n  --code-bg: #f1f3f5;\n  --tag-green-bg: #dcfce7;\n  --tag-green-text: #166534;\n  --tag-blue-bg: #dbeafe;\n  --tag-blue-text: #1e40af;\n  --tag-red-bg: #fee2e2;\n  --tag-red-text: #991b1b;\n  --tag-yellow-bg: #fef9c3;\n  --tag-yellow-text: #713f12;\n  --tag-purple-bg: #f3e8ff;\n  --tag-purple-text: #581c87;\n  --shadow: 0 1px 3px rgba(0,0,0,0.08);\n  --radius: 8px;\n  --max-width: 920px;\n}\n\n[data-theme=\"dark\"] {\n  --bg: #0b0b1a;\n  --bg2: #16162a;\n  --ink: #e2e4f0;\n  --muted: #7f8396;\n  --rule: #26263e;\n  --accent: #60a5fa;\n  --accent2: #4ade80;\n  --accent3: #f87171;\n  --accent4: #fbbf24;\n  --accent5: #a78bfa;\n  --card-bg: #16162a;\n  --code-bg: #1e1e36;\n  --tag-green-bg: #14532d;\n  --tag-green-text: #bbf7d0;\n  --tag-blue-bg: #1e3a5f;\n  --tag-blue-text: #bfdbfe;\n  --tag-red-bg: #7f1d1d;\n  --tag-red-text: #fecaca;\n  --tag-yellow-bg: #713f12;\n  --tag-yellow-text: #fef08a;\n  --tag-purple-bg: #3b1f6e;\n  --tag-purple-text: #e9d5ff;\n  --shadow: 0 1px 3px rgba(0,0,0,0.3);\n}\n\nbody {\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Noto Sans SC\", \"PingFang SC\", \"Microsoft YaHei\", monospace, sans-serif;\n  background: var(--bg);\n  color: var(--ink);\n  line-height: 1.7;\n  font-size: 15px;\n  transition: background .3s, color .3s;\n}\n\n\/* ===== Header ===== *\/\nheader {\n  position: fixed; top: 0; left: 0; right: 0; z-index: 100;\n  background: var(--bg2); border-bottom: 1px solid var(--rule);\n  backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);\n  transition: background .3s;\n}\n.header-inner {\n  max-width: var(--max-width); margin: 0 auto;\n  display: flex; align-items: center; justify-content: space-between;\n  padding: 0 1.5rem; height: 56px;\n}\n.logo {\n  font-weight: 700; font-size: .95rem; color: var(--accent);\n  display: flex; align-items: center; gap: .4rem;\n}\n.logo .icon { font-size: 1.1rem; }\n.controls { display: flex; align-items: center; gap: .5rem; }\n.lang-switch { display: flex; border: 1px solid var(--rule); border-radius: 6px; overflow: hidden; }\n.lang-switch button {\n  background: transparent; border: none; color: var(--muted);\n  padding: .3rem .7rem; font-size: .8rem; cursor: pointer;\n  transition: all .2s; font-family: inherit;\n}\n.lang-switch button.active { background: var(--accent); color: #fff; }\n.lang-switch button:not(.active):hover { color: var(--ink); background: var(--rule); }\n.theme-toggle {\n  background: transparent; border: 1px solid var(--rule); border-radius: 6px;\n  color: var(--muted); width: 34px; height: 34px; font-size: 1rem;\n  cursor: pointer; display: flex; align-items: center; justify-content: center;\n  transition: all .2s;\n}\n.theme-toggle:hover { color: var(--ink); background: var(--rule); }\n\n\/* ===== Layout ===== *\/\nmain { max-width: var(--max-width); margin: 0 auto; padding: 80px 1.5rem 3rem; }\n.lang-section { display: none; }\n.lang-section.active { display: block; }\n\n\/* ===== Typography ===== *\/\nh1 {\n  font-size: 1.9rem; font-weight: 800; line-height: 1.3;\n  margin-bottom: .5rem; letter-spacing: -.02em;\n}\nh1 .sub { display: block; font-size: .85rem; font-weight: 400; color: var(--muted); margin-top: .25rem; letter-spacing: 0; }\nh2 {\n  font-size: 1.35rem; font-weight: 700; margin: 2.5rem 0 1rem;\n  padding-bottom: .5rem; border-bottom: 2px solid var(--accent);\n  letter-spacing: -.01em;\n}\nh3 {\n  font-size: 1.05rem; font-weight: 600; margin: 1.5rem 0 .6rem;\n}\nh4 {\n  font-size: .95rem; font-weight: 600; margin: 1rem 0 .4rem;\n  color: var(--accent);\n}\np { margin-bottom: .8rem; }\na { color: var(--accent); text-decoration: none; }\na:hover { text-decoration: underline; }\n\n\/* ===== Hero ===== *\/\n.hero {\n  text-align: center; padding: 2rem 0 1rem;\n}\n.hero p { font-size: 1rem; color: var(--muted); max-width: 680px; margin: 0 auto; }\n\n\/* ===== Tags ===== *\/\n.tag { display: inline-block; padding: .12rem .5rem; border-radius: 4px; font-size: .72rem; font-weight: 600; margin-right: .25rem; white-space: nowrap; }\n.tag-green { background: var(--tag-green-bg); color: var(--tag-green-text); }\n.tag-blue { background: var(--tag-blue-bg); color: var(--tag-blue-text); }\n.tag-red { background: var(--tag-red-bg); color: var(--tag-red-text); }\n.tag-yellow { background: var(--tag-yellow-bg); color: var(--tag-yellow-text); }\n.tag-purple { background: var(--tag-purple-bg); color: var(--tag-purple-text); }\n\n\/* ===== Cards ===== *\/\n.card {\n  background: var(--card-bg); border: 1px solid var(--rule); border-radius: var(--radius);\n  padding: 1.25rem; margin-bottom: 1rem; box-shadow: var(--shadow);\n  transition: box-shadow .2s;\n}\n.card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.12); }\n\n\/* ===== Method Cards ===== *\/\n.method-card {\n  background: var(--card-bg); border: 1px solid var(--rule); border-radius: var(--radius);\n  padding: 1.5rem; margin-bottom: 1.25rem; box-shadow: var(--shadow);\n  border-left: 4px solid var(--accent);\n}\n.method-card h3 { margin-top: 0; display: flex; align-items: center; gap: .5rem; flex-wrap: wrap; }\n.method-card .url-example {\n  background: var(--code-bg); padding: .5rem .75rem; border-radius: 6px;\n  font-family: \"SF Mono\", Consolas, \"Courier New\", monospace;\n  font-size: .82rem; margin: .5rem 0 .75rem; overflow-x: auto;\n  border: 1px solid var(--rule);\n}\n.method-card .pros-cons { display: grid; grid-template-columns: 1fr 1fr; gap: .75rem; margin: .8rem 0; }\n@media (max-width: 500px) { .method-card .pros-cons { grid-template-columns: 1fr; } }\n.pros { background: var(--tag-green-bg); color: var(--tag-green-text); padding: .6rem .8rem; border-radius: 6px; font-size: .85rem; }\n.cons { background: var(--tag-red-bg); color: var(--tag-red-text); padding: .6rem .8rem; border-radius: 6px; font-size: .85rem; }\n.pros::before { content: \"\u2713 \u4f18\u70b9\\n\"; font-weight: 700; display: block; margin-bottom: .25rem; white-space: pre; }\n.cons::before { content: \"\u2717 \u7f3a\u70b9\\n\"; font-weight: 700; display: block; margin-bottom: .25rem; white-space: pre; }\n.pros ul, .cons ul { margin: 0; padding-left: 1rem; }\n.pros li, .cons li { margin-bottom: .15rem; }\n\n\/* ===== Step-by-step ===== *\/\n.steps {\n  counter-reset: step; list-style: none; padding: 0;\n}\n.steps li {\n  counter-increment: step; position: relative;\n  padding: .9rem 1rem .9rem 2.8rem;\n  margin-bottom: .5rem; border-left: 2px solid var(--rule);\n  border-radius: 0 var(--radius) var(--radius) 0;\n  background: var(--card-bg); box-shadow: var(--shadow);\n}\n.steps li::before {\n  content: counter(step); position: absolute; left: -13px; top: .9rem;\n  width: 26px; height: 26px; border-radius: 50%;\n  background: var(--accent); color: #fff;\n  display: flex; align-items: center; justify-content: center;\n  font-size: .78rem; font-weight: 700;\n}\n.steps li .cmd {\n  display: block; background: var(--code-bg); padding: .4rem .7rem;\n  border-radius: 5px; font-family: \"SF Mono\", Consolas, \"Courier New\", monospace;\n  font-size: .82rem; margin: .3rem 0; overflow-x: auto;\n  border: 1px solid var(--rule);\n}\n.steps li .note { display: block; color: var(--muted); font-size: .82rem; margin-top: .2rem; }\n\n\/* ===== Code ===== *\/\ncode, .inline-code {\n  background: var(--code-bg); padding: .15rem .4rem; border-radius: 4px;\n  font-family: \"SF Mono\", Consolas, \"Courier New\", monospace;\n  font-size: .84rem; border: 1px solid var(--rule);\n}\npre.code-block {\n  background: var(--code-bg); padding: .9rem 1rem; border-radius: var(--radius);\n  overflow-x: auto; font-family: \"SF Mono\", Consolas, \"Courier New\", monospace;\n  font-size: .82rem; line-height: 1.5; margin: .6rem 0;\n  border: 1px solid var(--rule);\n}\n\n\/* ===== Comparison Table ===== *\/\n.table-wrap { overflow-x: auto; margin: 1.2rem 0; }\ntable {\n  width: 100%; border-collapse: collapse; font-size: .82rem;\n}\nthead th {\n  background: var(--accent); color: #fff; padding: .6rem .5rem;\n  text-align: center; font-weight: 600; white-space: nowrap;\n}\nthead th:first-child { border-radius: 6px 0 0 0; }\nthead th:last-child { border-radius: 0 6px 0 0; }\ntbody td {\n  padding: .55rem .5rem; border-bottom: 1px solid var(--rule);\n  text-align: center; vertical-align: middle;\n}\ntbody tr:nth-child(even) { background: var(--bg); }\ntbody td:first-child { text-align: left; font-weight: 600; }\n\n\/* ===== Info Box ===== *\/\n.info-box {\n  background: var(--bg); border-left: 4px solid var(--accent);\n  padding: .9rem 1.1rem; margin: 1rem 0; border-radius: 0 var(--radius) var(--radius) 0;\n  font-size: .88rem;\n}\n.info-box strong { color: var(--accent); }\n.info-box.warn { border-left-color: var(--accent4); }\n.info-box.warn strong { color: var(--accent4); }\n.info-box.danger { border-left-color: var(--accent3); }\n.info-box.danger strong { color: var(--accent3); }\n\n\/* ===== Two-column comparison ===== *\/\n.two-col { display: grid; grid-template-columns: 1fr 1fr; gap: 1.25rem; margin: 1.25rem 0; }\n@media (max-width: 640px) { .two-col { grid-template-columns: 1fr; } }\n.col {\n  background: var(--card-bg); border: 1px solid var(--rule); border-radius: var(--radius);\n  padding: 1.25rem; box-shadow: var(--shadow);\n}\n.col h4 { margin-top: 0; display: flex; align-items: center; gap: .4rem; }\n\n\/* ===== Flow ===== *\/\n.flow-diagram {\n  background: var(--card-bg); border: 1px solid var(--rule); border-radius: var(--radius);\n  padding: 1.25rem; margin: 1.25rem 0; text-align: center;\n}\n.flow-row {\n  display: flex; align-items: center; justify-content: center;\n  flex-wrap: wrap; gap: .35rem; margin: .4rem 0;\n}\n.flow-item {\n  display: inline-block; padding: .4rem .8rem; border-radius: 6px;\n  font-weight: 600; font-size: .82rem; text-align: center;\n  background: var(--accent); color: #fff; min-width: 60px;\n}\n.flow-item.green { background: var(--accent2); }\n.flow-item.red { background: var(--accent3); }\n.flow-item.yellow { background: var(--accent4); color: #1a1a2e; }\n.flow-item.purple { background: var(--accent5); }\n.flow-arrow { color: var(--muted); font-size: 1rem; }\n\n\/* ===== TOC ===== *\/\n.toc {\n  background: var(--card-bg); border: 1px solid var(--rule); border-radius: var(--radius);\n  padding: 1.15rem 1.4rem; margin-bottom: 2rem; box-shadow: var(--shadow);\n}\n.toc h3 { margin: 0 0 .5rem; font-size: .9rem; color: var(--muted); text-transform: uppercase; letter-spacing: .05em; }\n.toc ol { padding-left: 1.1rem; columns: 2; column-gap: 2rem; }\n.toc li { margin-bottom: .25rem; font-size: .88rem; }\n.toc a { color: var(--ink); }\n.toc a:hover { color: var(--accent); text-decoration: none; }\n\n\/* ===== Footer ===== *\/\nfooter {\n  max-width: var(--max-width); margin: 3rem auto 0;\n  padding: 2rem 1.5rem 3rem; border-top: 1px solid var(--rule);\n  text-align: center; font-size: .82rem; color: var(--muted);\n}\nfooter .links { display: flex; justify-content: center; gap: 1.5rem; flex-wrap: wrap; margin-bottom: .8rem; }\nfooter .links a { color: var(--muted); }\nfooter .links a:hover { color: var(--accent); }\n\n\/* ===== Scenario Box ===== *\/\n.scenario-box {\n  background: var(--card-bg); border: 1px solid var(--rule); border-radius: var(--radius);\n  padding: 1.25rem; margin-bottom: .75rem; box-shadow: var(--shadow);\n  display: flex; align-items: center; gap: .8rem;\n}\n.scenario-box .rec { flex-shrink: 0; }\n.scenario-box .desc { font-size: .9rem; }\n.scenario-box .desc strong { color: var(--accent); }\n\n\/* ===== Responsive ===== *\/\n@media (max-width: 640px) {\n  h1 { font-size: 1.4rem; }\n  .toc ol { columns: 1; }\n  .header-inner { padding: 0 1rem; }\n  main { padding: 72px 1rem 2rem; }\n  .steps li { padding-left: 2.4rem; }\n  .steps li::before { left: -11px; width: 22px; height: 22px; font-size: .7rem; }\n  .scenario-box { flex-direction: column; align-items: flex-start; }\n}\n\n\/* ===== Terminal Simulation ===== *\/\n.terminal {\n  background: #1a1a2e; color: #a8e6cf; border-radius: var(--radius);\n  padding: .9rem 1rem; font-family: \"SF Mono\", Consolas, \"Courier New\", monospace;\n  font-size: .82rem; line-height: 1.6; margin: .6rem 0;\n  overflow-x: auto; border: 1px solid #333;\n}\n.terminal .prompt { color: #60a5fa; }\n.terminal .comment { color: #6c7086; font-style: italic; }\n.terminal .output { color: #e2e4f0; }\n[data-theme=\"dark\"] .terminal { background: #0b0b1a; }\n<\/style>\n<\/head>\n<body>\n\n<header>\n  <div class=\"header-inner\">\n    <div class=\"logo\"><span class=\"icon\">\u2387<\/span> Git Clone &amp; Push Guide<\/div>\n    <div class=\"controls\">\n      <div class=\"lang-switch\">\n        <button class=\"active\" onclick=\"setLang('zh')\" id=\"btn-zh\">\u4e2d\u6587<\/button>\n        <button onclick=\"setLang('en')\" id=\"btn-en\">English<\/button>\n      <\/div>\n      <button class=\"theme-toggle\" onclick=\"toggleTheme()\" title=\"Toggle theme\">&#9788;<\/button>\n    <\/div>\n  <\/div>\n<\/header>\n\n<main>\n\n<!-- ==================== ZH ==================== -->\n<div class=\"lang-section active\" id=\"lang-zh\">\n\n<div class=\"hero\">\n  <h1>Git Clone \u4e09\u79cd\u65b9\u5f0f + \u672c\u5730\u63d0\u4ea4\u5b8c\u6574\u6d41\u7a0b<\/h1>\n  <p>HTTPS \/ SSH \/ GitHub CLI \u7684\u533a\u522b\u4e0e\u9009\u578b\uff0c\u4ece\u62c9\u53d6\u4ee3\u7801\u5230\u63d0\u4ea4\u63a8\u9001\u7684\u5b8c\u6574\u6307\u5357<\/p>\n<\/div>\n\n<div class=\"toc\">\n  <h3>\u76ee\u5f55<\/h3>\n  <ol>\n    <li><a href=\"#zh-what\">Clone \u7684\u4e09\u79cd\u65b9\u5f0f\u6982\u89c8<\/a><\/li>\n    <li><a href=\"#zh-https\">HTTPS \u65b9\u5f0f\u8be6\u89e3<\/a><\/li>\n    <li><a href=\"#zh-ssh\">SSH \u65b9\u5f0f\u8be6\u89e3<\/a><\/li>\n    <li><a href=\"#zh-ghcli\">GitHub CLI (gh) \u65b9\u5f0f<\/a><\/li>\n    <li><a href=\"#zh-compare\">\u4e09\u79cd\u65b9\u5f0f\u5bf9\u6bd4\u603b\u8868<\/a><\/li>\n    <li><a href=\"#zh-other\">\u5176\u4ed6\u83b7\u53d6\u4ee3\u7801\u7684\u65b9\u5f0f<\/a><\/li>\n    <li><a href=\"#zh-workflow\">\u672c\u5730\u63d0\u4ea4\u4ee3\u7801\u5b8c\u6574\u6d41\u7a0b<\/a><\/li>\n    <li><a href=\"#zh-update\">\u5df2\u6709\u672c\u5730\u4ed3\u5e93\u7684\u66f4\u65b0\u7ef4\u62a4<\/a><\/li>\n    <li><a href=\"#zh-scenario\">\u573a\u666f\u9009\u578b\u5efa\u8bae<\/a><\/li>\n  <\/ol>\n<\/div>\n\n<!-- Section 1 -->\n<h2 id=\"zh-what\">\u4e00\u3001Clone \u7684\u4e09\u79cd\u65b9\u5f0f\u6982\u89c8<\/h2>\n<p><code>git clone<\/code> \u662f\u4ece\u8fdc\u7a0b\u4ed3\u5e93\u4e0b\u8f7d\u4ee3\u7801\u5230\u672c\u5730\u7684\u6807\u51c6\u65b9\u5f0f\u3002\u6839\u636e\u4e0d\u540c\u7684\u8ba4\u8bc1\u548c\u7f51\u7edc\u73af\u5883\uff0c\u4e3b\u8981\u6709\u4e09\u79cd\u65b9\u5f0f\u53ef\u9009\uff1a<\/p>\n\n<div class=\"table-wrap\">\n<table>\n  <thead>\n    <tr>\n      <th>\u65b9\u5f0f<\/th>\n      <th>\u5730\u5740\u683c\u5f0f\u793a\u4f8b<\/th>\n      <th>\u8ba4\u8bc1\u65b9\u5f0f<\/th>\n      <th>\u63a8\u8350\u573a\u666f<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td><span class=\"tag tag-blue\">HTTPS<\/span><\/td>\n      <td><code>https:\/\/github.com\/user\/repo.git<\/code><\/td>\n      <td>\u8d26\u53f7 + \u5bc6\u7801 \/ Personal Access Token (PAT)<\/td>\n      <td>\u65b0\u624b\u3001\u516c\u53f8\u5185\u7f51\u3001\u9632\u706b\u5899\u73af\u5883<\/td>\n    <\/tr>\n    <tr>\n      <td><span class=\"tag tag-green\">SSH<\/span><\/td>\n      <td><code>git@github.com:user\/repo.git<\/code><\/td>\n      <td>SSH \u5bc6\u94a5\u5bf9\uff08\u516c\u94a5\u4e0a\u4f20\u5e73\u53f0\uff09<\/td>\n      <td>\u957f\u671f\u9ad8\u9891\u5f00\u53d1\u3001\u4e2a\u4eba\u7535\u8111<\/td>\n    <\/tr>\n    <tr>\n      <td><span class=\"tag tag-purple\">GitHub CLI<\/span><\/td>\n      <td><code>gh repo clone user\/repo<\/code><\/td>\n      <td><code>gh auth login<\/code> \u767b\u5f55<\/td>\n      <td>\u7ec8\u7aef\u91cd\u5ea6\u4f7f\u7528\u8005\u3001\u9700\u7ba1\u7406 PR\/Issue<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n<\/div>\n\n<!-- Section 2 -->\n<h2 id=\"zh-https\">\u4e8c\u3001HTTPS \u65b9\u5f0f\u8be6\u89e3<\/h2>\n<div class=\"method-card\" style=\"border-left-color: var(--accent);\">\n  <h3><span class=\"tag tag-blue\">HTTPS<\/span> \u514b\u9686\u65b9\u5f0f<\/h3>\n  <div class=\"url-example\">git clone https:\/\/github.com\/user\/repo.git<\/div>\n  <div class=\"pros-cons\">\n    <div class=\"pros\">\n      <ul>\n        <li>\u5185\u7f51\u3001\u9632\u706b\u5899\u73af\u5883\u51e0\u4e4e\u4e0d\u4f1a\u88ab\u62e6\u622a\uff0c\u516c\u53f8\u7f51\u7edc\u901a\u7528<\/li>\n        <li>\u65e0\u9700\u63d0\u524d\u914d\u7f6e\u5bc6\u94a5\uff0c\u5f00\u7bb1\u5373\u7528<\/li>\n        <li>\u652f\u6301 Git \u51ed\u8bc1\u7f13\u5b58\uff08credential.helper\uff09\uff0c\u8bb0\u5fc6\u540e\u514d\u91cd\u590d\u8f93\u5165<\/li>\n      <\/ul>\n    <\/div>\n    <div class=\"cons\">\n      <ul>\n        <li>\u9891\u7e41\u64cd\u4f5c\u9700\u8981\u91cd\u590d\u8f93\u5165\u51ed\u8bc1\uff08\u53ef\u914d\u7f6e\u7f13\u5b58\u7f13\u89e3\uff09<\/li>\n        <li>GitHub \u5df2\u4e0d\u518d\u652f\u6301\u5bc6\u7801\u8ba4\u8bc1\uff0c\u5fc5\u987b\u4f7f\u7528 Personal Access Token (PAT)<\/li>\n        <li>Token \u8fc7\u671f\u540e\u9700\u8981\u91cd\u65b0\u751f\u6210\u548c\u914d\u7f6e<\/li>\n      <\/ul>\n    <\/div>\n  <\/div>\n  <h4>HTTPS \u51ed\u8bc1\u914d\u7f6e<\/h4>\n  <p>\u914d\u7f6e\u51ed\u8bc1\u7f13\u5b58\uff0c\u907f\u514d\u6bcf\u6b21\u64cd\u4f5c\u8f93\u5165\u8d26\u53f7\u548c Token\uff1a<\/p>\n  <pre class=\"code-block\"># \u5f00\u542f\u51ed\u8bc1\u7f13\u5b58\uff08\u9ed8\u8ba4 15 \u5206\u949f\uff09\ngit config --global credential.helper cache\n\n# \u957f\u671f\u7f13\u5b58\uff08\u4f8b\u5982 1 \u5c0f\u65f6\uff09\ngit config --global credential.helper 'cache --timeout=3600'\n\n# Windows \u4f7f\u7528 Git Credential Manager\uff08\u6c38\u4e45\u4fdd\u5b58\uff09\ngit config --global credential.helper manager-core<\/pre>\n<\/div>\n\n<!-- Section 3 -->\n<h2 id=\"zh-ssh\">\u4e09\u3001SSH \u65b9\u5f0f\u8be6\u89e3<\/h2>\n<div class=\"method-card\" style=\"border-left-color: var(--accent2);\">\n  <h3><span class=\"tag tag-green\">SSH<\/span> \u514b\u9686\u65b9\u5f0f<\/h3>\n  <div class=\"url-example\">git clone git@github.com:user\/repo.git<\/div>\n  <div class=\"pros-cons\">\n    <div class=\"pros\">\n      <ul>\n        <li>\u4e00\u6b21\u914d\u7f6e\u6c38\u4e45\u514d\u5bc6\uff0c\u64cd\u4f5c\u6d41\u7545<\/li>\n        <li>\u5b89\u5168\u6027\u9ad8\uff0c\u57fa\u4e8e\u5bc6\u94a5\u5bf9\u8ba4\u8bc1<\/li>\n        <li>\u9002\u5408\u811a\u672c\u81ea\u52a8\u5316\u3001CI\/CD \u6d41\u6c34\u7ebf\u4f7f\u7528<\/li>\n      <\/ul>\n    <\/div>\n    <div class=\"cons\">\n      <ul>\n        <li>\u4f01\u4e1a\u4e25\u683c\u9632\u706b\u5899\u53ef\u80fd\u62e6\u622a 22 \u7aef\u53e3\uff0c\u65e0\u6cd5\u8fde\u63a5<\/li>\n        <li>\u9700\u8981\u989d\u5916\u751f\u6210\u3001\u4e0a\u4f20\u5bc6\u94a5\uff0c\u9996\u6b21\u6709\u4e00\u5b9a\u4e0a\u624b\u6210\u672c<\/li>\n        <li>\u66f4\u6362\u7535\u8111\u9700\u91cd\u65b0\u914d\u7f6e\u5bc6\u94a5<\/li>\n      <\/ul>\n    <\/div>\n  <\/div>\n  <h4>SSH \u5bc6\u94a5\u914d\u7f6e\u6b65\u9aa4<\/h4>\n  <ol class=\"steps\">\n    <li>\n      \u751f\u6210 SSH \u5bc6\u94a5\u5bf9\n      <span class=\"cmd\">ssh-keygen -t ed25519 -C &#8220;your_email@example.com&#8221;<\/span>\n      <span class=\"note\">\u6309\u56de\u8f66\u4f7f\u7528\u9ed8\u8ba4\u8def\u5f84\uff08~\/.ssh\/id_ed25519\uff09\uff0c\u53ef\u8bbe\u7f6e\u5bc6\u7801\u77ed\u8bed\uff08passphrase\uff09\u6216\u7559\u7a7a<\/span>\n    <\/li>\n    <li>\n      \u67e5\u770b\u516c\u94a5\u5185\u5bb9\n      <span class=\"cmd\">cat ~\/.ssh\/id_ed25519.pub<\/span>\n      <span class=\"note\">\u590d\u5236\u8f93\u51fa\u7684\u5b8c\u6574\u5185\u5bb9\uff08\u4ee5 ssh-ed25519 \u5f00\u5934\uff09<\/span>\n    <\/li>\n    <li>\n      \u5c06\u516c\u94a5\u6dfb\u52a0\u5230\u4ee3\u7801\u5e73\u53f0\n      <span class=\"note\">GitHub \u2192 Settings \u2192 SSH and GPG keys \u2192 New SSH key\uff0c\u7c98\u8d34\u516c\u94a5\u5e76\u4fdd\u5b58<\/span>\n    <\/li>\n    <li>\n      \u6d4b\u8bd5\u8fde\u63a5\n      <span class=\"cmd\">ssh -T git@github.com<\/span>\n      <span class=\"note\">\u770b\u5230 &#8220;Hi username! You&#8217;ve successfully authenticated&#8221; \u5373\u8868\u793a\u914d\u7f6e\u6210\u529f<\/span>\n    <\/li>\n  <\/ol>\n<\/div>\n\n<!-- Section 4 -->\n<h2 id=\"zh-ghcli\">\u56db\u3001GitHub CLI (gh) \u65b9\u5f0f<\/h2>\n<div class=\"method-card\" style=\"border-left-color: var(--accent5);\">\n  <h3><span class=\"tag tag-purple\">GitHub CLI<\/span> \u514b\u9686\u65b9\u5f0f<\/h3>\n  <div class=\"url-example\">gh repo clone user\/repo<\/div>\n  <div class=\"pros-cons\">\n    <div class=\"pros\">\n      <ul>\n        <li>\u9664\u4e86 clone\uff0c\u8fd8\u53ef\u4e00\u952e\u521b\u5efa PR\u3001\u67e5\u770b Issue\u3001\u7ba1\u7406\u4ed3\u5e93<\/li>\n        <li>\u8bed\u6cd5\u66f4\u7b80\u6d01\uff0c\u65e0\u9700\u8bb0\u5fc6 Git \u5730\u5740<\/li>\n        <li>\u7edf\u4e00\u7ba1\u7406 GitHub \u76f8\u5173\u64cd\u4f5c<\/li>\n      <\/ul>\n    <\/div>\n    <div class=\"cons\">\n      <ul>\n        <li>\u9700\u8981\u5355\u72ec\u5b89\u88c5 <code>gh<\/code> \u5de5\u5177<\/li>\n        <li>\u4ec5\u9002\u5408\u7ec8\u7aef\u91cd\u5ea6\u4f7f\u7528\u8005\uff0c\u666e\u901a\u5f00\u53d1\u6ca1\u5fc5\u8981<\/li>\n        <li>\u4e0d\u5982\u539f\u751f Git \u901a\u7528\uff08\u5176\u4ed6\u4ee3\u7801\u5e73\u53f0\u4e0d\u9002\u7528\uff09<\/li>\n      <\/ul>\n    <\/div>\n  <\/div>\n  <h4>\u5b89\u88c5\u4e0e\u521d\u59cb\u5316<\/h4>\n  <ol class=\"steps\">\n    <li>\n      \u5b89\u88c5 GitHub CLI\n      <span class=\"note\">Windows: <code>winget install GitHub.cli<\/code> \u6216\u4ece <a href=\"https:\/\/cli.github.com\/\" target=\"_blank\" rel=\"noopener\">cli.github.com<\/a> \u4e0b\u8f7d<\/span>\n      <span class=\"note\">macOS: <code>brew install gh<\/code><\/span>\n    <\/li>\n    <li>\n      \u767b\u5f55 GitHub\n      <span class=\"cmd\">gh auth login<\/span>\n      <span class=\"note\">\u9009\u62e9 GitHub.com\uff0c\u9009\u62e9 HTTPS \u6216 SSH \u534f\u8bae\uff0c\u4f7f\u7528\u6d4f\u89c8\u5668\u6216 Token \u5b8c\u6210\u767b\u5f55<\/span>\n    <\/li>\n    <li>\n      \u514b\u9686\u4ed3\u5e93\n      <span class=\"cmd\">gh repo clone user\/repo<\/span>\n      <span class=\"note\">\u4f1a\u81ea\u52a8\u521b\u5efa <code>user\/repo<\/code> \u6587\u4ef6\u5939\u5e76\u62c9\u53d6\u4ee3\u7801<\/span>\n    <\/li>\n  <\/ol>\n<\/div>\n\n<!-- Section 5 -->\n<h2 id=\"zh-compare\">\u4e94\u3001\u4e09\u79cd\u65b9\u5f0f\u5bf9\u6bd4\u603b\u8868<\/h2>\n<div class=\"table-wrap\">\n<table>\n  <thead>\n    <tr>\n      <th>\u7ef4\u5ea6<\/th>\n      <th>HTTPS<\/th>\n      <th>SSH<\/th>\n      <th>GitHub CLI<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>\u9996\u6b21\u914d\u7f6e\u95e8\u69db<\/td>\n      <td>\u4f4e\uff08\u9700\u751f\u6210 PAT\uff09<\/td>\n      <td>\u4e2d\uff08\u9700\u751f\u6210\u4e0a\u4f20\u5bc6\u94a5\uff09<\/td>\n      <td>\u4e2d\uff08\u9700\u5b89\u88c5 gh + \u767b\u5f55\uff09<\/td>\n    <\/tr>\n    <tr>\n      <td>\u662f\u5426\u9700\u989d\u5916\u5b89\u88c5<\/td>\n      <td>\u4e0d\u9700\u8981<\/td>\n      <td>\u4e0d\u9700\u8981<\/td>\n      <td>\u9700\u8981\u5b89\u88c5 gh \u5de5\u5177<\/td>\n    <\/tr>\n    <tr>\n      <td>\u9632\u706b\u5899\u517c\u5bb9\u6027<\/td>\n      <td>\u9ad8\uff08443 \u7aef\u53e3\u901a\u7528\uff09<\/td>\n      <td>\u4f4e\uff0822 \u7aef\u53e3\u53ef\u80fd\u88ab\u62e6\u622a\uff09<\/td>\n      <td>\u53d6\u51b3\u4e8e\u5e95\u5c42\u534f\u8bae<\/td>\n    <\/tr>\n    <tr>\n      <td>\u63a8\u9001\u662f\u5426\u9700\u8981\u51ed\u8bc1<\/td>\n      <td>\u9700\u8981\uff08\u53ef\u7f13\u5b58\uff09<\/td>\n      <td>\u514d\u5bc6\uff08\u5bc6\u94a5\u8ba4\u8bc1\uff09<\/td>\n      <td>\u514d\u5bc6\uff08gh \u4f1a\u8bdd\uff09<\/td>\n    <\/tr>\n    <tr>\n      <td>\u9002\u5408\u7684\u573a\u666f<\/td>\n      <td>\u65b0\u624b\u3001\u4f01\u4e1a\u5185\u7f51<\/td>\n      <td>\u957f\u671f\u4e2a\u4eba\u5f00\u53d1<\/td>\n      <td>\u91cd\u5ea6 CLI \u7528\u6237<\/td>\n    <\/tr>\n    <tr>\n      <td>\u901a\u7528\u7684\u4ee3\u7801\u5e73\u53f0<\/td>\n      <td>GitHub \/ GitLab \/ Gitee \u7b49\u5168\u90e8\u652f\u6301<\/td>\n      <td>\u5168\u90e8\u652f\u6301<\/td>\n      <td>\u4ec5 GitHub<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n<\/div>\n\n<!-- Section 6 -->\n<h2 id=\"zh-other\">\u516d\u3001\u5176\u4ed6\u83b7\u53d6\u4ee3\u7801\u7684\u65b9\u5f0f<\/h2>\n\n<div class=\"card\">\n  <h4><span class=\"tag tag-blue\">GitHub Desktop<\/span> \u56fe\u5f62\u5316\u5ba2\u6237\u7aef<\/h4>\n  <p>GitHub \u5b98\u65b9\u63d0\u4f9b\u7684\u514d\u8d39\u684c\u9762\u5de5\u5177\uff0c<strong>\u4e0d\u7528\u6572\u547d\u4ee4<\/strong>\uff0c\u53ef\u89c6\u5316\u5b8c\u6210\u514b\u9686\u3001\u63d0\u4ea4\u3001\u63a8\u9001\u3001\u521b\u5efa\u5206\u652f\u7b49\u64cd\u4f5c\u3002\u9002\u5408\u4e0d\u719f\u6089\u547d\u4ee4\u884c\u7684\u7528\u6237\u3002\u70b9\u51fb\u4ed3\u5e93\u9875\u9762\u7684 &#8220;Open with GitHub Desktop&#8221; \u6309\u94ae\u5373\u53ef\u81ea\u52a8\u514b\u9686\u3002<\/p>\n<\/div>\n\n<div class=\"card\">\n  <h4><span class=\"tag tag-yellow\">Download ZIP<\/span> \u4e0b\u8f7d\u538b\u7f29\u5305<\/h4>\n  <p>\u4ec5\u4e00\u6b21\u6027\u4e0b\u8f7d\u6e90\u7801\u5feb\u7167\uff0c<strong>\u4e0d\u662f Git \u4ed3\u5e93<\/strong>\u3002\u4e0b\u8f7d\u7684\u662f\u666e\u901a\u6587\u4ef6\u5939\uff0c\u6ca1\u6709 <code>.git<\/code> \u76ee\u5f55\uff0c<strong>\u4e0d\u80fd\u63d0\u4ea4\u3001\u63a8\u9001\u4ee3\u7801\uff0c\u6ca1\u6709\u7248\u672c\u8ffd\u8e2a<\/strong>\u3002\u4ec5\u9002\u5408\u4e34\u65f6\u67e5\u770b\u6e90\u7801\u3002<\/p>\n  <div class=\"info-box danger\"><strong>\u6ce8\u610f\uff1a<\/strong>Download ZIP \u4e0b\u8f7d\u7684\u6587\u4ef6\u65e0\u6cd5\u6267\u884c git push \u63d0\u4ea4\u4ee3\u7801\u3002\u5982\u679c\u9700\u8981\u53c2\u4e0e\u9879\u76ee\u5f00\u53d1\uff0c\u5fc5\u987b\u4f7f\u7528 git clone\u3002<\/div>\n<\/div>\n\n<!-- Section 7 -->\n<h2 id=\"zh-workflow\">\u4e03\u3001\u672c\u5730\u63d0\u4ea4\u4ee3\u7801\u5b8c\u6574\u6d41\u7a0b<\/h2>\n<p>\u4ee5\u4e0b\u5047\u8bbe\u573a\u666f\uff1a<strong>\u5df2\u7ecf git clone \u4e86\u8fdc\u7a0b\u4ed3\u5e93\u5230\u672c\u5730<\/strong>\uff0c\u73b0\u5728\u9700\u8981\u4fee\u6539\u4ee3\u7801\u5e76\u63a8\u9001\u56de\u8fdc\u7a0b\u4ed3\u5e93\u3002<\/p>\n\n<h3>\u65b9\u6848 A\uff1a\u547d\u4ee4\u884c Git\uff08\u901a\u7528\uff0c\u63a8\u8350\uff09<\/h3>\n<div class=\"flow-diagram\">\n  <div class=\"flow-row\">\n    <span class=\"flow-item\">git status<\/span>\n    <span class=\"flow-arrow\">\u2192<\/span>\n    <span class=\"flow-item green\">git add .<\/span>\n    <span class=\"flow-arrow\">\u2192<\/span>\n    <span class=\"flow-item yellow\">git commit -m<\/span>\n    <span class=\"flow-arrow\">\u2192<\/span>\n    <span class=\"flow-item purple\">git push<\/span>\n  <\/div>\n<\/div>\n\n<ol class=\"steps\">\n  <li>\n    \u67e5\u770b\u6587\u4ef6\u53d8\u66f4\u72b6\u6001\n    <span class=\"cmd\">git status<\/span>\n    <span class=\"note\">\u7ea2\u8272 = \u672a\u8ffd\u8e2a\/\u4fee\u6539\u7684\u6587\u4ef6\uff1b\u7eff\u8272 = \u5df2\u52a0\u5165\u6682\u5b58\u533a<\/span>\n  <\/li>\n  <li>\n    \u5c06\u6539\u52a8\u52a0\u5165\u6682\u5b58\u533a\n    <span class=\"cmd\">git add .<\/span>\n    <span class=\"note\"><code>.<\/code> \u8868\u793a\u6dfb\u52a0\u6240\u6709\u53d8\u66f4\u6587\u4ef6\uff1b\u4e5f\u53ef\u6307\u5b9a\u6587\u4ef6\u5982 <code>git add src\/index.ts<\/code><\/span>\n  <\/li>\n  <li>\n    \u586b\u5199\u63d0\u4ea4\u8bf4\u660e\n    <span class=\"cmd\">git commit -m &#8220;\u5b8c\u6210 DWG \u5730\u5c42\u89e3\u6790\u6807\u51c6\u5316\u903b\u8f91&#8221;<\/span>\n    <span class=\"note\">\u63d0\u4ea4\u4fe1\u606f\u5e94\u6e05\u6670\u8bf4\u660e\u672c\u6b21\u6539\u52a8\u7684\u76ee\u7684\u548c\u5185\u5bb9\uff0c\u5efa\u8bae\u4f7f\u7528\u82f1\u6587\u6216\u4e2d\u6587\u5747\u53ef<\/span>\n  <\/li>\n  <li>\n    \u63a8\u9001\u5230\u8fdc\u7a0b\u4ed3\u5e93\n    <span class=\"cmd\">git push<\/span>\n    <span class=\"note\">HTTPS \u9996\u6b21\u63a8\u9001\u4f1a\u5f39\u51fa\u7a97\u53e3\u8981\u6c42\u8f93\u5165\u8d26\u53f7 + Personal Access Token<br>SSH \u914d\u7f6e\u597d\u5bc6\u94a5\u540e\u76f4\u63a5\u63a8\u9001\uff0c\u65e0\u9700\u8f93\u5165\u51ed\u8bc1<\/span>\n  <\/li>\n<\/ol>\n\n<div class=\"info-box\">\n  <strong>\u63d0\u793a\uff1a<\/strong>\u5982\u679c\u63a8\u9001\u65f6\u63d0\u793a &#8220;The requested URL returned error: 403&#8221; \u6216\u8ba4\u8bc1\u5931\u8d25\uff0c\u8bf4\u660e\u9700\u8981\u914d\u7f6e Personal Access Token \u6216 SSH \u5bc6\u94a5\u3002HTTPS \u65b9\u5f0f\u5efa\u8bae\u5728 Token \u751f\u6210\u540e\u901a\u8fc7 <code>git config --global credential.helper manager-core<\/code> \u7f13\u5b58\u51ed\u8bc1\u3002\n<\/div>\n\n<h4>\u5b8c\u6574\u7ec8\u7aef\u64cd\u4f5c\u793a\u4f8b<\/h4>\n<div class=\"terminal\">\n  <span class=\"prompt\">D:\\Code\\borehole-log-standardizer&gt;<\/span> git status<br>\n  <span class=\"output\">Changes not staged for commit:<br>\n  &nbsp;&nbsp;modified: src\/parser.py<\/span><br>\n  <br>\n  <span class=\"prompt\">D:\\Code\\borehole-log-standardizer&gt;<\/span> git add .<br>\n  <br>\n  <span class=\"prompt\">D:\\Code\\borehole-log-standardizer&gt;<\/span> git commit -m &#8220;Implement DWG borehole log parsing standardization&#8221;<br>\n  <span class=\"output\">[main abc1234] Implement DWG borehole log parsing standardization<br>\n  &nbsp;1 file changed, 45 insertions(+), 12 deletions(-)<\/span><br>\n  <br>\n  <span class=\"prompt\">D:\\Code\\borehole-log-standardizer&gt;<\/span> git push<br>\n  <span class=\"output\">Enumerating objects: 7, done.<br>\n  Counting objects: 100% (7\/7), done.<br>\n  Writing objects: 100% (4\/4), 1.2 KiB done.<br>\n  Total 4 (delta 2), reused 0 (delta 0)<br>\n  To https:\/\/github.com\/user\/repo.git<br>\n  &nbsp;&nbsp;abc1234..def5678 main -&gt; main<\/span>\n<\/div>\n\n<h3>\u65b9\u6848 B\uff1aGitHub Desktop \u56fe\u5f62\u5316\u5de5\u5177<\/h3>\n<ol class=\"steps\">\n  <li>\n    \u6253\u5f00 GitHub Desktop\uff0c\u70b9\u51fb <strong>File \u2192 Clone Repository<\/strong>\uff0c\u6216\u76f4\u63a5\u5728\u4ed3\u5e93\u9875\u9762\u70b9\u51fb &#8220;Open with GitHub Desktop&#8221;\n    <span class=\"note\">\u9009\u62e9\u672c\u5730\u5b58\u653e\u8def\u5f84\u540e\uff0c\u5de5\u5177\u81ea\u52a8\u5b8c\u6210\u514b\u9686<\/span>\n  <\/li>\n  <li>\n    \u5728\u672c\u5730\u6587\u4ef6\u5939\u4e2d\u4fee\u6539\u4ee3\u7801\uff08\u4f7f\u7528 VS Code \u6216\u5176\u4ed6\u7f16\u8f91\u5668\uff09\n    <span class=\"note\">GitHub Desktop \u5de6\u4fa7\u81ea\u52a8\u663e\u793a\u53d8\u66f4\u6587\u4ef6\u5217\u8868\uff0c\u6587\u4ef6\u65c1\u6709 <span class=\"tag tag-green\">+<\/span> \u6807\u8bb0\u65b0\u589e\u884c\u3001<span class=\"tag tag-red\">&#8211;<\/span> \u6807\u8bb0\u5220\u9664\u884c<\/span>\n  <\/li>\n  <li>\n    \u5728 GitHub Desktop \u5de6\u4e0b\u89d2\u586b\u5199\u63d0\u4ea4\u6458\u8981\uff08Summary\uff09\u548c\u53ef\u9009\u63cf\u8ff0\uff08Description\uff09\n    <span class=\"note\">\u70b9\u51fb <strong>Commit to main<\/strong> \u5b8c\u6210\u672c\u5730\u63d0\u4ea4<\/span>\n  <\/li>\n  <li>\n    \u70b9\u51fb\u7a97\u53e3\u53f3\u4e0a\u89d2\u7684 <strong>Push origin<\/strong> \u6309\u94ae\n    <span class=\"note\">\u4ee3\u7801\u63a8\u9001\u5230\u8fdc\u7a0b\u4ed3\u5e93\u540e\uff0c\u6309\u94ae\u53d8\u4e3a\u7070\u8272\u8868\u793a\u5df2\u540c\u6b65<\/span>\n  <\/li>\n<\/ol>\n\n<div class=\"info-box warn\">\n  <strong>\u6ce8\u610f\uff1a<\/strong>GitHub Desktop \u5e95\u5c42\u540c\u6837\u4f7f\u7528 Git\uff0c\u53ea\u662f\u5c06\u547d\u4ee4\u884c\u64cd\u4f5c\u5c01\u88c5\u4e3a\u53ef\u89c6\u5316\u754c\u9762\u3002\u63d0\u4ea4\u5386\u53f2\uff08commit log\uff09\u3001\u5206\u652f\u7ba1\u7406\uff08branch\uff09\u7b49\u529f\u80fd\u5747\u4e0e\u547d\u4ee4\u884c\u4e00\u81f4\u3002\n<\/div>\n\n<!-- Section 8 -->\n<h2 id=\"zh-update\">\u516b\u3001\u5df2\u6709\u672c\u5730\u4ed3\u5e93\u7684\u66f4\u65b0\u7ef4\u62a4<\/h2>\n<p>\u5047\u8bbe\u573a\u666f\uff1a<strong>\u672c\u5730\u5df2\u7ecf clone \u8fc7\u4ed3\u5e93\uff0c\u4f46\u8fdc\u7a0b\u4ed3\u5e93\u5df2\u88ab\u5176\u4ed6\u4eba\u66f4\u65b0<\/strong>\uff0c\u9700\u8981\u62c9\u53d6\u6700\u65b0\u4ee3\u7801\u5e76\u7ee7\u7eed\u5f00\u53d1\u3002<\/p>\n\n<h3>\u65e5\u5e38\u5f00\u53d1\u5faa\u73af<\/h3>\n<div class=\"flow-diagram\">\n  <div class=\"flow-row\">\n    <span class=\"flow-item green\">git pull<\/span>\n    <span class=\"flow-arrow\">\u2192<\/span>\n    <span class=\"flow-item\">\u4fee\u6539\u4ee3\u7801<\/span>\n    <span class=\"flow-arrow\">\u2192<\/span>\n    <span class=\"flow-item yellow\">git add .<\/span>\n    <span class=\"flow-arrow\">\u2192<\/span>\n    <span class=\"flow-item yellow\">git commit<\/span>\n    <span class=\"flow-arrow\">\u2192<\/span>\n    <span class=\"flow-item purple\">git push<\/span>\n  <\/div>\n<\/div>\n\n<h4>1. \u62c9\u53d6\u8fdc\u7a0b\u6700\u65b0\u4ee3\u7801<\/h4>\n<pre class=\"code-block\"># \u62c9\u53d6\u8fdc\u7a0b main \u5206\u652f\u7684\u6700\u65b0\u4ee3\u7801\u5e76\u81ea\u52a8\u5408\u5e76\u5230\u672c\u5730\ngit pull origin main\n\n# \u5982\u679c\u53ea\u9700\u67e5\u770b\u8fdc\u7a0b\u6709\u54ea\u4e9b\u66f4\u65b0\uff08\u4e0d\u5408\u5e76\uff09\ngit fetch origin<\/pre>\n<div class=\"info-box\"><strong>\u5efa\u8bae\uff1a<\/strong>\u6bcf\u6b21\u5f00\u59cb\u5de5\u4f5c\u524d\u5148\u6267\u884c <code>git pull<\/code>\uff0c\u786e\u4fdd\u672c\u5730\u4ee3\u7801\u4e0e\u8fdc\u7a0b\u540c\u6b65\uff0c\u51cf\u5c11\u51b2\u7a81\u3002<\/div>\n\n<h4>2. \u89e3\u51b3\u4ee3\u7801\u51b2\u7a81<\/h4>\n<p>\u5982\u679c <code>git pull<\/code> \u63d0\u793a\u51b2\u7a81\uff08CONFLICT\uff09\uff0c\u9700\u8981\u624b\u52a8\u89e3\u51b3\uff1a<\/p>\n<ol class=\"steps\">\n  <li>\n    \u67e5\u770b\u54ea\u4e9b\u6587\u4ef6\u51b2\u7a81\n    <span class=\"cmd\">git status<\/span>\n    <span class=\"note\">\u51b2\u7a81\u6587\u4ef6\u663e\u793a\u4e3a <code>both modified<\/code><\/span>\n  <\/li>\n  <li>\n    \u6253\u5f00\u51b2\u7a81\u6587\u4ef6\uff0c\u641c\u7d22 <code>&lt;&lt;&lt;&lt;&lt;&lt;&lt;<\/code> \u6807\u8bb0\n    <span class=\"note\">\u51b2\u7a81\u533a\u57df\u4ee5 <code>&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD<\/code>\uff08\u672c\u5730\u6539\u52a8\uff09\u548c <code>=======<\/code>\uff08\u5206\u9694\u7ebf\uff09\u548c <code>&gt;&gt;&gt;&gt;&gt;&gt;&gt; remote<\/code>\uff08\u8fdc\u7a0b\u6539\u52a8\uff09\u6807\u8bc6<\/span>\n  <\/li>\n  <li>\n    \u624b\u52a8\u7f16\u8f91\u4fdd\u7559\u6b63\u786e\u5185\u5bb9\uff0c\u5220\u9664\u51b2\u7a81\u6807\u8bb0\n    <span class=\"note\">\u53ef\u4f7f\u7528 VS Code \u7b49\u7f16\u8f91\u5668\u5185\u7f6e\u7684\u51b2\u7a81\u89e3\u51b3\u5de5\u5177\uff08Accept Current \/ Incoming \/ Both\uff09<\/span>\n  <\/li>\n  <li>\n    \u6807\u8bb0\u4e3a\u5df2\u89e3\u51b3\u5e76\u63d0\u4ea4\n    <span class=\"cmd\">git add .<br>git commit -m &#8220;Resolve merge conflict between local and remote&#8221;<\/span>\n  <\/li>\n<\/ol>\n\n<h4>3. \u5206\u652f\u7ba1\u7406<\/h4>\n<pre class=\"code-block\"># \u521b\u5efa\u5e76\u5207\u6362\u5230\u65b0\u5206\u652f\ngit checkout -b feature\/new-function\n\n# \u5207\u6362\u5230\u5df2\u6709\u5206\u652f\ngit checkout main\n\n# \u67e5\u770b\u6240\u6709\u5206\u652f\ngit branch -a\n\n# \u5c06\u65b0\u5206\u652f\u63a8\u9001\u5230\u8fdc\u7a0b\ngit push origin feature\/new-function<\/pre>\n\n<h4>4. \u67e5\u770b\u63d0\u4ea4\u5386\u53f2<\/h4>\n<pre class=\"code-block\"># \u67e5\u770b\u63d0\u4ea4\u8bb0\u5f55\ngit log --oneline -10\n\n# \u67e5\u770b\u67d0\u6b21\u63d0\u4ea4\u7684\u8be6\u7ec6\u6539\u52a8\ngit show abc1234<\/pre>\n\n<!-- Section 9 -->\n<h2 id=\"zh-scenario\">\u4e5d\u3001\u573a\u666f\u9009\u578b\u5efa\u8bae<\/h2>\n\n<div class=\"scenario-box\">\n  <span class=\"tag tag-blue rec\">\u63a8\u8350 HTTPS<\/span>\n  <div class=\"desc\"><strong>\u516c\u53f8\u5185\u7f51\u3001\u9632\u706b\u5899\u4e25\u683c\uff1a<\/strong>\u4f18\u5148\u4f7f\u7528 HTTPS\uff0c443 \u7aef\u53e3\u51e0\u4e4e\u4e0d\u4f1a\u88ab\u62e6\u622a\uff0c\u914d\u7f6e PAT + \u51ed\u8bc1\u7f13\u5b58\u540e\u53ef\u6d41\u7545\u4f7f\u7528\u3002<\/div>\n<\/div>\n\n<div class=\"scenario-box\">\n  <span class=\"tag tag-green rec\">\u63a8\u8350 SSH<\/span>\n  <div class=\"desc\"><strong>\u81ea\u5df1\u7535\u8111\u957f\u671f\u5f00\u53d1\u3001\u65e0\u7f51\u7edc\u9650\u5236\uff1a<\/strong>\u914d\u7f6e SSH \u5bc6\u94a5\u540e\u6c38\u4e45\u514d\u5bc6\uff0c\u65e5\u5e38\u63a8\u9001\u62c9\u53d6\u66f4\u6d41\u7545\u3002<\/div>\n<\/div>\n\n<div class=\"scenario-box\">\n  <span class=\"tag tag-blue rec\">\u63a8\u8350 GitHub Desktop<\/span>\n  <div class=\"desc\"><strong>\u5b8c\u5168\u4e0d\u60f3\u6572\u547d\u4ee4\uff1a<\/strong>\u4f7f\u7528 GitHub Desktop \u56fe\u5f62\u5316\u754c\u9762\uff0c\u53ef\u89c6\u5316\u5b8c\u6210\u6240\u6709 Git \u64cd\u4f5c\u3002<\/div>\n<\/div>\n\n<div class=\"scenario-box\">\n  <span class=\"tag tag-purple rec\">\u63a8\u8350 gh CLI<\/span>\n  <div class=\"desc\"><strong>\u7ec8\u7aef\u91cd\u5ea6\u7528\u6237\u3001\u9700\u8981\u7ba1\u7406 PR\/Issue\uff1a<\/strong>\u5b89\u88c5 GitHub CLI\uff0cclone \u53ea\u662f\u5176\u529f\u80fd\u4e4b\u4e00\uff0c\u7ed3\u5408 PR\u3001Issue \u7ba1\u7406\u53ef\u63d0\u5347\u6548\u7387\u3002<\/div>\n<\/div>\n\n<div class=\"scenario-box\">\n  <span class=\"tag tag-red rec\">\u4e0d\u63a8\u8350<\/span>\n  <div class=\"desc\"><strong>\u4ec5 Download ZIP\uff1a<\/strong>\u4ec5\u4e34\u65f6\u67e5\u770b\u6e90\u7801\u53ef\u4ee5\uff0c\u4f46\u65e0\u6cd5\u63d0\u4ea4\u4ee3\u7801\uff0c\u4e0d\u9002\u5408\u4efb\u4f55\u5f00\u53d1\u53c2\u4e0e\u573a\u666f\u3002<\/div>\n<\/div>\n\n<div class=\"info-box\">\n  <strong>\u603b\u7ed3\uff1a<\/strong>\u5bf9\u7edd\u5927\u591a\u6570\u5f00\u53d1\u8005\u6765\u8bf4\uff0c<strong>HTTPS<\/strong> \u662f\u6700\u901a\u7528\u7a33\u59a5\u7684\u9009\u62e9\uff1b<strong>SSH<\/strong> \u662f\u63d0\u5347\u4f53\u9a8c\u7684\u8fdb\u9636\u65b9\u6848\uff1b<strong>GitHub Desktop<\/strong> \u662f\u96f6\u547d\u4ee4\u5165\u95e8\u65b9\u6848\u3002\u65e5\u5e38\u5f00\u53d1\u5faa\u73af\u8bb0\u4f4f\u56db\u4e2a\u547d\u4ee4\u5373\u53ef\uff1a<code>git pull<\/code> \u2192 <code>git add .<\/code> \u2192 <code>git commit -m<\/code> \u2192 <code>git push<\/code>\u3002\n<\/div>\n\n<\/div><!-- \/zh -->\n\n\n<!-- ==================== EN ==================== -->\n<div class=\"lang-section\" id=\"lang-en\">\n\n<div class=\"hero\">\n  <h1>Git Clone 3 Ways + Local Commit Workflow<\/h1>\n  <p>HTTPS vs SSH vs GitHub CLI \u2014 the complete guide from cloning to pushing<\/p>\n<\/div>\n\n<div class=\"toc\">\n  <h3>Table of Contents<\/h3>\n  <ol>\n    <li><a href=\"#en-what\">Clone Methods Overview<\/a><\/li>\n    <li><a href=\"#en-https\">HTTPS in Detail<\/a><\/li>\n    <li><a href=\"#en-ssh\">SSH in Detail<\/a><\/li>\n    <li><a href=\"#en-ghcli\">GitHub CLI (gh)<\/a><\/li>\n    <li><a href=\"#en-compare\">Comparison Table<\/a><\/li>\n    <li><a href=\"#en-other\">Other Ways to Get Code<\/a><\/li>\n    <li><a href=\"#en-workflow\">Local Commit Workflow<\/a><\/li>\n    <li><a href=\"#en-update\">Updating an Existing Local Repo<\/a><\/li>\n    <li><a href=\"#en-scenario\">Scenario Recommendations<\/a><\/li>\n  <\/ol>\n<\/div>\n\n<!-- Section 1 -->\n<h2 id=\"en-what\">1. Clone Methods Overview<\/h2>\n<p><code>git clone<\/code> is the standard way to download a remote repository to your local machine. There are three main methods depending on authentication and network environment:<\/p>\n\n<div class=\"table-wrap\">\n<table>\n  <thead>\n    <tr>\n      <th>Method<\/th>\n      <th>URL Example<\/th>\n      <th>Authentication<\/th>\n      <th>Best For<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td><span class=\"tag tag-blue\">HTTPS<\/span><\/td>\n      <td><code>https:\/\/github.com\/user\/repo.git<\/code><\/td>\n      <td>Password \/ Personal Access Token (PAT)<\/td>\n      <td>Beginners, corporate networks, firewalls<\/td>\n    <\/tr>\n    <tr>\n      <td><span class=\"tag tag-green\">SSH<\/span><\/td>\n      <td><code>git@github.com:user\/repo.git<\/code><\/td>\n      <td>SSH key pair (public key uploaded)<\/td>\n      <td>Long-term development, personal machines<\/td>\n    <\/tr>\n    <tr>\n      <td><span class=\"tag tag-purple\">GitHub CLI<\/span><\/td>\n      <td><code>gh repo clone user\/repo<\/code><\/td>\n      <td><code>gh auth login<\/code><\/td>\n      <td>Heavy terminal users, PR\/Issue management<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n<\/div>\n\n<!-- Section 2 -->\n<h2 id=\"en-https\">2. HTTPS in Detail<\/h2>\n<div class=\"method-card\" style=\"border-left-color: var(--accent);\">\n  <h3><span class=\"tag tag-blue\">HTTPS<\/span> Clone<\/h3>\n  <div class=\"url-example\">git clone https:\/\/github.com\/user\/repo.git<\/div>\n  <div class=\"pros-cons\">\n    <div class=\"pros\">\n      <ul>\n        <li>Works reliably through corporate firewalls and proxies<\/li>\n        <li>No key configuration needed upfront<\/li>\n        <li>Supports credential caching (credential.helper)<\/li>\n      <\/ul>\n    <\/div>\n    <div class=\"cons\">\n      <ul>\n        <li>Requires repeated credential entry without caching<\/li>\n        <li>GitHub no longer accepts passwords \u2014 must use PAT<\/li>\n        <li>PAT expires and needs regeneration<\/li>\n      <\/ul>\n    <\/div>\n  <\/div>\n  <h4>Credential Caching<\/h4>\n  <pre class=\"code-block\"># Cache credentials (default 15 min)\ngit config --global credential.helper cache\n\n# Long-term cache (e.g. 1 hour)\ngit config --global credential.helper 'cache --timeout=3600'\n\n# Windows: Git Credential Manager (permanent)\ngit config --global credential.helper manager-core<\/pre>\n<\/div>\n\n<!-- Section 3 -->\n<h2 id=\"en-ssh\">3. SSH in Detail<\/h2>\n<div class=\"method-card\" style=\"border-left-color: var(--accent2);\">\n  <h3><span class=\"tag tag-green\">SSH<\/span> Clone<\/h3>\n  <div class=\"url-example\">git clone git@github.com:user\/repo.git<\/div>\n  <div class=\"pros-cons\">\n    <div class=\"pros\">\n      <ul>\n        <li>Password-free after initial setup \u2014 seamless push\/pull<\/li>\n        <li>High security via key-pair authentication<\/li>\n        <li>Ideal for automation scripts and CI\/CD pipelines<\/li>\n      <\/ul>\n    <\/div>\n    <div class=\"cons\">\n      <ul>\n        <li>Port 22 may be blocked by strict corporate firewalls<\/li>\n        <li>Requires key generation and upload \u2014 some upfront effort<\/li>\n        <li>Must re-configure when changing machines<\/li>\n      <\/ul>\n    <\/div>\n  <\/div>\n  <h4>SSH Key Setup<\/h4>\n  <ol class=\"steps\">\n    <li>\n      Generate SSH key pair\n      <span class=\"cmd\">ssh-keygen -t ed25519 -C &#8220;your_email@example.com&#8221;<\/span>\n      <span class=\"note\">Press Enter for default path (~\/.ssh\/id_ed25519). Optionally set a passphrase.<\/span>\n    <\/li>\n    <li>\n      View your public key\n      <span class=\"cmd\">cat ~\/.ssh\/id_ed25519.pub<\/span>\n      <span class=\"note\">Copy the full output (starts with ssh-ed25519)<\/span>\n    <\/li>\n    <li>\n      Add public key to your code platform\n      <span class=\"note\">GitHub \u2192 Settings \u2192 SSH and GPG keys \u2192 New SSH key. Paste and save.<\/span>\n    <\/li>\n    <li>\n      Test connection\n      <span class=\"cmd\">ssh -T git@github.com<\/span>\n      <span class=\"note\">&#8220;Hi username! You&#8217;ve successfully authenticated&#8221; confirms success.<\/span>\n    <\/li>\n  <\/ol>\n<\/div>\n\n<!-- Section 4 -->\n<h2 id=\"en-ghcli\">4. GitHub CLI (gh)<\/h2>\n<div class=\"method-card\" style=\"border-left-color: var(--accent5);\">\n  <h3><span class=\"tag tag-purple\">GitHub CLI<\/span> Clone<\/h3>\n  <div class=\"url-example\">gh repo clone user\/repo<\/div>\n  <div class=\"pros-cons\">\n    <div class=\"pros\">\n      <ul>\n        <li>Create PRs, view Issues, manage repos from terminal<\/li>\n        <li>Cleaner syntax \u2014 no need to remember Git URLs<\/li>\n        <li>Unified tool for all GitHub operations<\/li>\n      <\/ul>\n    <\/div>\n    <div class=\"cons\">\n      <ul>\n        <li>Requires installing the <code>gh<\/code> tool separately<\/li>\n        <li>Overkill for casual development<\/li>\n        <li>GitHub-only (not for GitLab\/Gitee etc.)<\/li>\n      <\/ul>\n    <\/div>\n  <\/div>\n  <h4>Installation &amp; Setup<\/h4>\n  <ol class=\"steps\">\n    <li>\n      Install GitHub CLI\n      <span class=\"note\">Windows: <code>winget install GitHub.cli<\/code> or download from <a href=\"https:\/\/cli.github.com\/\" target=\"_blank\" rel=\"noopener\">cli.github.com<\/a><\/span>\n      <span class=\"note\">macOS: <code>brew install gh<\/code><\/span>\n    <\/li>\n    <li>\n      Log in to GitHub\n      <span class=\"cmd\">gh auth login<\/span>\n      <span class=\"note\">Choose GitHub.com, select HTTPS or SSH, authenticate via browser or Token<\/span>\n    <\/li>\n    <li>\n      Clone a repository\n      <span class=\"cmd\">gh repo clone user\/repo<\/span>\n      <span class=\"note\">Automatically creates the folder and downloads the code<\/span>\n    <\/li>\n  <\/ol>\n<\/div>\n\n<!-- Section 5 -->\n<h2 id=\"en-compare\">5. Comparison Table<\/h2>\n<div class=\"table-wrap\">\n<table>\n  <thead>\n    <tr>\n      <th>Dimension<\/th>\n      <th>HTTPS<\/th>\n      <th>SSH<\/th>\n      <th>GitHub CLI<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>Initial setup effort<\/td>\n      <td>Low (need PAT)<\/td>\n      <td>Medium (generate + upload key)<\/td>\n      <td>Medium (install gh + login)<\/td>\n    <\/tr>\n    <tr>\n      <td>Extra software needed<\/td>\n      <td>No<\/td>\n      <td>No<\/td>\n      <td>Yes (gh tool)<\/td>\n    <\/tr>\n    <tr>\n      <td>Firewall compatibility<\/td>\n      <td>High (port 443)<\/td>\n      <td>Low (port 22 may be blocked)<\/td>\n      <td>Depends on underlying protocol<\/td>\n    <\/tr>\n    <tr>\n      <td>Push requires credentials<\/td>\n      <td>Yes (can cache)<\/td>\n      <td>No (key authentication)<\/td>\n      <td>No (gh session)<\/td>\n    <\/tr>\n    <tr>\n      <td>Best for<\/td>\n      <td>Beginners, corporate<\/td>\n      <td>Long-term personal dev<\/td>\n      <td>Heavy CLI users<\/td>\n    <\/tr>\n    <tr>\n      <td>Platform support<\/td>\n      <td>GitHub \/ GitLab \/ Gitee, all platforms<\/td>\n      <td>All platforms<\/td>\n      <td>GitHub only<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n<\/div>\n\n<!-- Section 6 -->\n<h2 id=\"en-other\">6. Other Ways to Get Code<\/h2>\n\n<div class=\"card\">\n  <h4><span class=\"tag tag-blue\">GitHub Desktop<\/span> GUI Client<\/h4>\n  <p>Free desktop tool from GitHub \u2014 <strong>no commands needed<\/strong>. Visual clone, commit, push, branch management. Click &#8220;Open with GitHub Desktop&#8221; on any repo page to auto-clone.<\/p>\n<\/div>\n\n<div class=\"card\">\n  <h4><span class=\"tag tag-yellow\">Download ZIP<\/span><\/h4>\n  <p>Downloads a one-time snapshot \u2014 <strong>not a Git repository<\/strong>. No <code>.git<\/code> directory, <strong>no version tracking, no ability to push code<\/strong>. Only suitable for temporary code review.<\/p>\n  <div class=\"info-box danger\"><strong>Warning:<\/strong> Code downloaded via ZIP cannot execute <code>git push<\/code>. Use <code>git clone<\/code> if you plan to contribute.<\/div>\n<\/div>\n\n<!-- Section 7 -->\n<h2 id=\"en-workflow\">7. Local Commit Workflow<\/h2>\n<p>Assuming: <strong>you have already cloned the repository<\/strong> and now need to modify code and push changes back.<\/p>\n\n<h3>Option A: Command Line Git (Recommended)<\/h3>\n<div class=\"flow-diagram\">\n  <div class=\"flow-row\">\n    <span class=\"flow-item\">git status<\/span>\n    <span class=\"flow-arrow\">\u2192<\/span>\n    <span class=\"flow-item green\">git add .<\/span>\n    <span class=\"flow-arrow\">\u2192<\/span>\n    <span class=\"flow-item yellow\">git commit -m<\/span>\n    <span class=\"flow-arrow\">\u2192<\/span>\n    <span class=\"flow-item purple\">git push<\/span>\n  <\/div>\n<\/div>\n\n<ol class=\"steps\">\n  <li>\n    Check changed files\n    <span class=\"cmd\">git status<\/span>\n    <span class=\"note\">Red = untracked\/modified; Green = staged<\/span>\n  <\/li>\n  <li>\n    Stage changes\n    <span class=\"cmd\">git add .<\/span>\n    <span class=\"note\"><code>.<\/code> adds all changes; or specify files like <code>git add src\/index.ts<\/code><\/span>\n  <\/li>\n  <li>\n    Write a commit message\n    <span class=\"cmd\">git commit -m &#8220;Implement DWG borehole log parsing standardization&#8221;<\/span>\n    <span class=\"note\">The message should clearly describe what was changed and why<\/span>\n  <\/li>\n  <li>\n    Push to remote\n    <span class=\"cmd\">git push<\/span>\n    <span class=\"note\">HTTPS first push: enter username + PAT in the popup window<br>SSH: pushes directly without credential prompt<\/span>\n  <\/li>\n<\/ol>\n\n<div class=\"info-box\">\n  <strong>Tip:<\/strong> If push returns &#8220;403&#8221; or authentication errors, configure PAT (HTTPS) or SSH keys. For HTTPS, use <code>git config --global credential.helper manager-core<\/code> to cache credentials.\n<\/div>\n\n<h4>Full Terminal Example<\/h4>\n<div class=\"terminal\">\n  <span class=\"prompt\">D:\\Code\\borehole-log-standardizer&gt;<\/span> git status<br>\n  <span class=\"output\">Changes not staged for commit:<br>\n  &nbsp;&nbsp;modified: src\/parser.py<\/span><br>\n  <br>\n  <span class=\"prompt\">D:\\Code\\borehole-log-standardizer&gt;<\/span> git add .<br>\n  <br>\n  <span class=\"prompt\">D:\\Code\\borehole-log-standardizer&gt;<\/span> git commit -m &#8220;Implement DWG borehole log parsing standardization&#8221;<br>\n  <span class=\"output\">[main abc1234] Implement DWG borehole log parsing standardization<br>\n  &nbsp;1 file changed, 45 insertions(+), 12 deletions(-)<\/span><br>\n  <br>\n  <span class=\"prompt\">D:\\Code\\borehole-log-standardizer&gt;<\/span> git push<br>\n  <span class=\"output\">Enumerating objects: 7, done.<br>\n  Counting objects: 100% (7\/7), done.<br>\n  Writing objects: 100% (4\/4), 1.2 KiB done.<br>\n  Total 4 (delta 2), reused 0 (delta 0)<br>\n  To https:\/\/github.com\/user\/repo.git<br>\n  &nbsp;&nbsp;abc1234..def5678 main -&gt; main<\/span>\n<\/div>\n\n<h3>Option B: GitHub Desktop GUI (Zero Commands)<\/h3>\n<ol class=\"steps\">\n  <li>\n    Open GitHub Desktop, click <strong>File \u2192 Clone Repository<\/strong>, or click &#8220;Open with GitHub Desktop&#8221; on the repo page\n    <span class=\"note\">Choose a local path and the tool auto-clones<\/span>\n  <\/li>\n  <li>\n    Edit code in your local folder (VS Code or other editor)\n    <span class=\"note\">GitHub Desktop shows changed files on the left with <span class=\"tag tag-green\">+<\/span> (additions) and <span class=\"tag tag-red\">&#8211;<\/span> (deletions)<\/span>\n  <\/li>\n  <li>\n    Fill in Summary (required) and Description (optional) in the bottom-left corner\n    <span class=\"note\">Click <strong>Commit to main<\/strong><\/span>\n  <\/li>\n  <li>\n    Click <strong>Push origin<\/strong> in the top-right corner\n    <span class=\"note\">Button turns gray when synced with remote<\/span>\n  <\/li>\n<\/ol>\n\n<!-- Section 8 -->\n<h2 id=\"en-update\">8. Updating an Existing Local Repo<\/h2>\n<p>Scenario: <strong>local repo already exists but remote has new changes<\/strong> from other contributors.<\/p>\n\n<h3>Daily Development Loop<\/h3>\n<div class=\"flow-diagram\">\n  <div class=\"flow-row\">\n    <span class=\"flow-item green\">git pull<\/span>\n    <span class=\"flow-arrow\">\u2192<\/span>\n    <span class=\"flow-item\">Edit code<\/span>\n    <span class=\"flow-arrow\">\u2192<\/span>\n    <span class=\"flow-item yellow\">git add .<\/span>\n    <span class=\"flow-arrow\">\u2192<\/span>\n    <span class=\"flow-item yellow\">git commit<\/span>\n    <span class=\"flow-arrow\">\u2192<\/span>\n    <span class=\"flow-item purple\">git push<\/span>\n  <\/div>\n<\/div>\n\n<h4>1. Pull Latest Code<\/h4>\n<pre class=\"code-block\"># Pull latest changes from remote main branch (auto-merge)\ngit pull origin main\n\n# Just check for updates without merging\ngit fetch origin<\/pre>\n<div class=\"info-box\"><strong>Best practice:<\/strong> Always <code>git pull<\/code> before starting work to minimize merge conflicts.<\/div>\n\n<h4>2. Resolving Merge Conflicts<\/h4>\n<p>If <code>git pull<\/code> reports CONFLICT, resolve manually:<\/p>\n<ol class=\"steps\">\n  <li>\n    Check conflicted files\n    <span class=\"cmd\">git status<\/span>\n    <span class=\"note\">Conflicted files show as <code>both modified<\/code><\/span>\n  <\/li>\n  <li>\n    Open the file and search for <code>&lt;&lt;&lt;&lt;&lt;&lt;&lt;<\/code> markers\n    <span class=\"note\"><code>&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD<\/code> = local changes, <code>=======<\/code> = divider, <code>&gt;&gt;&gt;&gt;&gt;&gt;&gt; remote<\/code> = remote changes<\/span>\n  <\/li>\n  <li>\n    Edit to keep the correct content, remove conflict markers\n    <span class=\"note\">VS Code has built-in conflict resolution (Accept Current \/ Incoming \/ Both Changes)<\/span>\n  <\/li>\n  <li>\n    Mark as resolved and commit\n    <span class=\"cmd\">git add .<br>git commit -m &#8220;Resolve merge conflict&#8221;<\/span>\n  <\/li>\n<\/ol>\n\n<h4>3. Branch Management<\/h4>\n<pre class=\"code-block\"># Create and switch to a new branch\ngit checkout -b feature\/new-function\n\n# Switch to an existing branch\ngit checkout main\n\n# List all branches\ngit branch -a\n\n# Push a new branch to remote\ngit push origin feature\/new-function<\/pre>\n\n<h4>4. Viewing History<\/h4>\n<pre class=\"code-block\"># View recent commits\ngit log --oneline -10\n\n# View details of a specific commit\ngit show abc1234<\/pre>\n\n<!-- Section 9 -->\n<h2 id=\"en-scenario\">9. Scenario Recommendations<\/h2>\n\n<div class=\"scenario-box\">\n  <span class=\"tag tag-blue rec\">HTTPS<\/span>\n  <div class=\"desc\"><strong>Corporate network, strict firewall:<\/strong> HTTPS uses port 443 which is rarely blocked. Configure PAT + credential caching for smooth use.<\/div>\n<\/div>\n\n<div class=\"scenario-box\">\n  <span class=\"tag tag-green rec\">SSH<\/span>\n  <div class=\"desc\"><strong>Personal machine, long-term development:<\/strong> One-time SSH setup provides permanent password-free operation.<\/div>\n<\/div>\n\n<div class=\"scenario-box\">\n  <span class=\"tag tag-blue rec\">GitHub Desktop<\/span>\n  <div class=\"desc\"><strong>No desire to use command line:<\/strong> Visual interface for all Git operations \u2014 clone, commit, push, branch.<\/div>\n<\/div>\n\n<div class=\"scenario-box\">\n  <span class=\"tag tag-purple rec\">gh CLI<\/span>\n  <div class=\"desc\"><strong>Heavy terminal user, PR\/Issue management:<\/strong> GitHub CLI does more than clone \u2014 create PRs, view issues, manage repos from one tool.<\/div>\n<\/div>\n\n<div class=\"scenario-box\">\n  <span class=\"tag tag-red rec\">Not Recommended<\/span>\n  <div class=\"desc\"><strong>Download ZIP only:<\/strong> Acceptable for quick code review, but cannot push changes. Not suitable for any development work.<\/div>\n<\/div>\n\n<div class=\"info-box\">\n  <strong>Summary:<\/strong> For most developers, <strong>HTTPS<\/strong> is the most universal and reliable choice. <strong>SSH<\/strong> is the friction-free upgrade. <strong>GitHub Desktop<\/strong> is the zero-command entry point. Remember the four-command loop: <code>git pull<\/code> \u2192 <code>git add .<\/code> \u2192 <code>git commit -m<\/code> \u2192 <code>git push<\/code>.\n<\/div>\n\n<\/div><!-- \/en -->\n\n<\/main>\n\n<footer>\n  <div class=\"links\">\n    <a href=\"https:\/\/git-scm.com\/doc\" target=\"_blank\" rel=\"noopener\">Git Documentation<\/a>\n    <a href=\"https:\/\/docs.github.com\/en\/authentication\" target=\"_blank\" rel=\"noopener\">GitHub Auth Guide<\/a>\n    <a href=\"https:\/\/cli.github.com\/\" target=\"_blank\" rel=\"noopener\">GitHub CLI<\/a>\n    <a href=\"https:\/\/desktop.github.com\/\" target=\"_blank\" rel=\"noopener\">GitHub Desktop<\/a>\n  <\/div>\n  <p>Git Clone &amp; Push Guide \u00b7 Git \u514b\u9686\u4e0e\u63d0\u4ea4\u5b8c\u5168\u6307\u5357<\/p>\n<\/footer>\n\n<script>\nfunction setLang(lang) {\n  document.querySelectorAll('.lang-section').forEach(function(el) { el.classList.remove('active'); });\n  document.getElementById('lang-' + lang).classList.add('active');\n  document.querySelectorAll('.lang-switch button').forEach(function(btn) { btn.classList.remove('active'); });\n  document.getElementById('btn-' + lang).classList.add('active');\n  document.documentElement.lang = lang === 'zh' ? 'zh-CN' : 'en';\n  var prefix = lang === 'zh' ? 'zh' : 'en';\n  var hash = window.location.hash.replace(\/^#(zh|en)-\/, prefix + '-');\n  if (hash) window.location.hash = hash;\n}\n\nfunction toggleTheme() {\n  var html = document.documentElement;\n  if (html.hasAttribute('data-theme')) {\n    html.removeAttribute('data-theme');\n    localStorage.removeItem('theme');\n  } else {\n    html.setAttribute('data-theme', 'dark');\n    localStorage.setItem('theme', 'dark');\n  }\n}\n\n(function() {\n  if (localStorage.getItem('theme') === 'dark') {\n    document.documentElement.setAttribute('data-theme', 'dark');\n  }\n  var hash = window.location.hash;\n  if (hash) {\n    var target = document.querySelector(hash);\n    if (target) setTimeout(function() { target.scrollIntoView({ behavior: 'smooth' }); }, 100);\n  }\n})();\n<\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>Git Clone \u4e09\u79cd\u65b9\u5f0f + \u672c\u5730\u63d0\u4ea4\u4ee3\u7801\u5b8c\u6574\u6d41\u7a0b \u00b7 Clone &#038; Push Guide \u2387 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,9],"tags":[],"class_list":["post-314","post","type-post","status-publish","format-standard","hentry","category-cad","category-ai"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/numsimlab.com\/index.php?rest_route=\/wp\/v2\/posts\/314","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/numsimlab.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/numsimlab.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/numsimlab.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/numsimlab.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=314"}],"version-history":[{"count":1,"href":"https:\/\/numsimlab.com\/index.php?rest_route=\/wp\/v2\/posts\/314\/revisions"}],"predecessor-version":[{"id":315,"href":"https:\/\/numsimlab.com\/index.php?rest_route=\/wp\/v2\/posts\/314\/revisions\/315"}],"wp:attachment":[{"href":"https:\/\/numsimlab.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=314"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/numsimlab.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=314"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/numsimlab.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=314"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}