-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy path69c3279c.html
More file actions
426 lines (311 loc) · 40.1 KB
/
69c3279c.html
File metadata and controls
426 lines (311 loc) · 40.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<meta name="theme-color" content="#222"><meta name="generator" content="Hexo 6.3.0">
<link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
<link rel="icon" type="image/png" sizes="32x32" href="/images/favicon.png">
<link rel="icon" type="image/png" sizes="16x16" href="/images/favicon.png">
<link rel="mask-icon" href="/images/logo.svg" color="#222">
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" integrity="sha256-HtsXJanqjKTc8vVQjO4YMhiqFoXkfBsjBWcX91T1jr8=" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.1.1/animate.min.css" integrity="sha256-PR7ttpcvz8qrF57fur/yAx1qXMFJeJFiA6pSzWi0OIE=" crossorigin="anonymous">
<script class="next-config" data-name="main" type="application/json">{"hostname":"tallate.github.io","root":"/","images":"/images","scheme":"Gemini","darkmode":false,"version":"8.18.0","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12},"copycode":{"enable":false,"style":null},"fold":{"enable":false,"height":500},"bookmark":{"enable":false,"color":"#222","save":"auto"},"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"stickytabs":false,"motion":{"enable":true,"async":false,"transition":{"menu_item":"fadeInDown","post_block":"fadeIn","post_header":"fadeInDown","post_body":"fadeInDown","coll_header":"fadeInLeft","sidebar":"fadeInUp"}},"prism":false,"i18n":{"placeholder":"搜索...","empty":"没有找到任何搜索结果:${query}","hits_time":"找到 ${hits} 个搜索结果(用时 ${time} 毫秒)","hits":"找到 ${hits} 个搜索结果"}}</script><script src="/js/config.js"></script>
<meta name="description" content="概念Git 中有 4 个区域: 工作区( Working Area ) 暂存区( Stage ) 本地仓库( Local Repository ) 远程仓库( Remote Repository ) 文件有 5 种状态: 未修改( Origin ) 已修改( Modified ) 已暂存( Staged ) 已提交( Committed ) 已推送( Pushed ) 文件刚开">
<meta property="og:type" content="article">
<meta property="og:title" content="Git">
<meta property="og:url" content="https://tallate.github.io/69c3279c.html">
<meta property="og:site_name" content="Tallate">
<meta property="og:description" content="概念Git 中有 4 个区域: 工作区( Working Area ) 暂存区( Stage ) 本地仓库( Local Repository ) 远程仓库( Remote Repository ) 文件有 5 种状态: 未修改( Origin ) 已修改( Modified ) 已暂存( Staged ) 已提交( Committed ) 已推送( Pushed ) 文件刚开">
<meta property="og:locale" content="zh_CN">
<meta property="article:published_time" content="2018-07-29T12:14:29.000Z">
<meta property="article:modified_time" content="2025-07-06T17:56:20.885Z">
<meta property="article:author" content="tallate">
<meta property="article:tag" content="Git">
<meta name="twitter:card" content="summary">
<link rel="canonical" href="https://tallate.github.io/69c3279c.html">
<script class="next-config" data-name="page" type="application/json">{"sidebar":"","isHome":false,"isPost":true,"lang":"zh-CN","comments":true,"permalink":"https://tallate.github.io/69c3279c.html","path":"/69c3279c.html","title":"Git"}</script>
<script class="next-config" data-name="calendar" type="application/json">""</script>
<title>Git | Tallate</title>
<noscript>
<link rel="stylesheet" href="/css/noscript.css">
</noscript>
</head>
<body itemscope itemtype="http://schema.org/WebPage" class="use-motion">
<div class="headband"></div>
<main class="main">
<div class="column">
<header class="header" itemscope itemtype="http://schema.org/WPHeader"><div class="site-brand-container">
<div class="site-nav-toggle">
<div class="toggle" aria-label="切换导航栏" role="button">
<span class="toggle-line"></span>
<span class="toggle-line"></span>
<span class="toggle-line"></span>
</div>
</div>
<div class="site-meta">
<a href="/" class="brand" rel="start">
<i class="logo-line"></i>
<p class="site-title">Tallate</p>
<i class="logo-line"></i>
</a>
<p class="site-subtitle" itemprop="description">该吃吃该喝喝 啥事别往心里搁</p>
</div>
<div class="site-nav-right">
<div class="toggle popup-trigger" aria-label="搜索" role="button">
<i class="fa fa-search fa-fw fa-lg"></i>
</div>
</div>
</div>
<nav class="site-nav">
<ul class="main-menu menu"><li class="menu-item menu-item-home"><a href="/" rel="section"><i class="home fa-fw"></i>首页</a></li><li class="menu-item menu-item-about"><a href="/about/" rel="section"><i class="user fa-fw"></i>关于</a></li><li class="menu-item menu-item-tags"><a href="/tags/" rel="section"><i class="tags fa-fw"></i>标签<span class="badge">84</span></a></li><li class="menu-item menu-item-categories"><a href="/categories/" rel="section"><i class="th fa-fw"></i>分类<span class="badge">25</span></a></li><li class="menu-item menu-item-archives"><a href="/archives/" rel="section"><i class="archive fa-fw"></i>归档<span class="badge">192</span></a></li>
<li class="menu-item menu-item-search">
<a role="button" class="popup-trigger"><i class="fa fa-search fa-fw"></i>搜索
</a>
</li>
</ul>
</nav>
<div class="search-pop-overlay">
<div class="popup search-popup"><div class="search-header">
<span class="search-icon">
<i class="fa fa-search"></i>
</span>
<div class="search-input-container">
<input autocomplete="off" autocapitalize="off" maxlength="80"
placeholder="搜索..." spellcheck="false"
type="search" class="search-input">
</div>
<span class="popup-btn-close" role="button">
<i class="fa fa-times-circle"></i>
</span>
</div>
<div class="search-result-container no-result">
<div class="search-result-icon">
<i class="fa fa-spinner fa-pulse fa-5x"></i>
</div>
</div>
</div>
</div>
</header>
<aside class="sidebar">
<div class="sidebar-inner sidebar-nav-active sidebar-toc-active">
<ul class="sidebar-nav">
<li class="sidebar-nav-toc">
文章目录
</li>
<li class="sidebar-nav-overview">
站点概览
</li>
</ul>
<div class="sidebar-panel-container">
<!--noindex-->
<div class="post-toc-wrap sidebar-panel">
<div class="post-toc animated"><ol class="nav"><li class="nav-item nav-level-2"><a class="nav-link" href="#%E6%A6%82%E5%BF%B5"><span class="nav-number">1.</span> <span class="nav-text">概念</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#%E7%B4%A2%E5%BC%95"><span class="nav-number">1.1.</span> <span class="nav-text">索引</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#%E5%88%86%E6%94%AF"><span class="nav-number">1.2.</span> <span class="nav-text">分支</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#%E5%91%BD%E4%BB%A4"><span class="nav-number">2.</span> <span class="nav-text">命令</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#status"><span class="nav-number">2.1.</span> <span class="nav-text">status</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#diff%EF%BC%88%E6%AF%94%E8%BE%83%E6%96%87%E4%BB%B6%EF%BC%89"><span class="nav-number">2.2.</span> <span class="nav-text">diff(比较文件)</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#log%EF%BC%88%E6%98%BE%E7%A4%BA%E6%8F%90%E4%BA%A4%E5%8E%86%E5%8F%B2%EF%BC%89"><span class="nav-number">2.3.</span> <span class="nav-text">log(显示提交历史)</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#ignore"><span class="nav-number">2.4.</span> <span class="nav-text">ignore</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#config"><span class="nav-number">2.5.</span> <span class="nav-text">config</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#add%EF%BC%88%E5%BB%BA%E7%AB%8B%E7%B4%A2%E5%BC%95%EF%BC%89"><span class="nav-number">2.6.</span> <span class="nav-text">add(建立索引)</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#unmodifying%EF%BC%88%E5%B7%B2%E4%BF%AE%E6%94%B9-%E6%9C%AA%E4%BF%AE%E6%94%B9%EF%BC%89"><span class="nav-number">2.7.</span> <span class="nav-text">unmodifying(已修改->未修改)</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#commit%EF%BC%88%E6%8F%90%E4%BA%A4%EF%BC%89"><span class="nav-number">2.8.</span> <span class="nav-text">commit(提交)</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#unstage%EF%BC%88%E6%92%A4%E9%94%80-add%EF%BC%8C%E5%B7%B2%E6%9A%82%E5%AD%98-%E5%B7%B2%E4%BF%AE%E6%94%B9%EF%BC%89"><span class="nav-number">2.9.</span> <span class="nav-text">unstage(撤销 add,已暂存->已修改)</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#tag"><span class="nav-number">2.10.</span> <span class="nav-text">tag</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#aliase"><span class="nav-number">2.11.</span> <span class="nav-text">aliase</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#push"><span class="nav-number">2.12.</span> <span class="nav-text">push</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#remote"><span class="nav-number">2.13.</span> <span class="nav-text">remote</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#branch"><span class="nav-number">2.14.</span> <span class="nav-text">branch</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#checkout"><span class="nav-number">2.15.</span> <span class="nav-text">checkout</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#rebase%EF%BC%88%E8%A1%8D%E5%90%88%EF%BC%89%E5%92%8C-merge%EF%BC%88%E5%90%88%E5%B9%B6%EF%BC%89"><span class="nav-number">2.16.</span> <span class="nav-text">rebase(衍合)和 merge(合并)</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#stash"><span class="nav-number">2.17.</span> <span class="nav-text">stash</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#reset"><span class="nav-number">2.18.</span> <span class="nav-text">reset</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#%E7%BB%9F%E8%AE%A1%E4%BB%A3%E7%A0%81%E9%87%8F"><span class="nav-number">2.19.</span> <span class="nav-text">统计代码量</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#%E5%9B%9E%E6%BB%9A"><span class="nav-number">2.20.</span> <span class="nav-text">回滚</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#%E5%B7%A5%E4%BD%9C%E6%B5%81"><span class="nav-number">3.</span> <span class="nav-text">工作流</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#%E5%8F%82%E8%80%83"><span class="nav-number">4.</span> <span class="nav-text">参考</span></a></li></ol></div>
</div>
<!--/noindex-->
<div class="site-overview-wrap sidebar-panel">
<div class="site-author animated" itemprop="author" itemscope itemtype="http://schema.org/Person">
<p class="site-author-name" itemprop="name">tallate</p>
<div class="site-description" itemprop="description"></div>
</div>
<div class="site-state-wrap animated">
<nav class="site-state">
<div class="site-state-item site-state-posts">
<a href="/archives/">
<span class="site-state-item-count">192</span>
<span class="site-state-item-name">日志</span>
</a>
</div>
<div class="site-state-item site-state-categories">
<a href="/categories/">
<span class="site-state-item-count">25</span>
<span class="site-state-item-name">分类</span></a>
</div>
<div class="site-state-item site-state-tags">
<a href="/tags/">
<span class="site-state-item-count">84</span>
<span class="site-state-item-name">标签</span></a>
</div>
</nav>
</div>
</div>
</div>
</div>
</aside>
</div>
<div class="main-inner post posts-expand">
<div class="post-block">
<article itemscope itemtype="http://schema.org/Article" class="post-content" lang="zh-CN">
<link itemprop="mainEntityOfPage" href="https://tallate.github.io/69c3279c.html">
<span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
<meta itemprop="image" content="/images/avatar.gif">
<meta itemprop="name" content="tallate">
</span>
<span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
<meta itemprop="name" content="Tallate">
<meta itemprop="description" content="">
</span>
<span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork">
<meta itemprop="name" content="Git | Tallate">
<meta itemprop="description" content="">
</span>
<header class="post-header">
<h1 class="post-title" itemprop="name headline">
Git
</h1>
<div class="post-meta-container">
<div class="post-meta">
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar"></i>
</span>
<span class="post-meta-item-text">发表于</span>
<time title="创建时间:2018-07-29 20:14:29" itemprop="dateCreated datePublished" datetime="2018-07-29T20:14:29+08:00">2018-07-29</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">更新于</span>
<time title="修改时间:2025-07-07 01:56:20" itemprop="dateModified" datetime="2025-07-07T01:56:20+08:00">2025-07-07</time>
</span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-folder"></i>
</span>
<span class="post-meta-item-text">分类于</span>
<span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/%E5%85%B6%E4%BB%96/" itemprop="url" rel="index"><span itemprop="name">其他</span></a>
</span>
</span>
</div>
</div>
</header>
<div class="post-body" itemprop="articleBody"><span id="more"></span>
<h2 id="概念"><a href="#概念" class="headerlink" title="概念"></a>概念</h2><p>Git 中有 4 个区域:</p>
<ul>
<li>工作区( Working Area )</li>
<li>暂存区( Stage )</li>
<li>本地仓库( Local Repository )</li>
<li>远程仓库( Remote Repository )</li>
</ul>
<p>文件有 5 种状态:</p>
<ul>
<li><p>未修改( Origin )</p>
</li>
<li><p>已修改( Modified )</p>
</li>
<li><p>已暂存( Staged )</p>
</li>
<li><p>已提交( Committed )</p>
</li>
<li><p>已推送( Pushed )</p>
</li>
<li><p>文件刚开始处于工作区,编辑文件后可以使用<code>git diff</code>查看文件进行了哪些修改</p>
</li>
<li><p>add 命令可以添加到<strong>暂存区</strong>,可以使用<code>git diff --cached</code>查看文件在暂存区和本地仓库之间的区别</p>
</li>
<li><p>commit 提交到本地仓库,可以使用<code>git diff master origin/master</code>查看本地仓库分支和远程仓库分支之间的区别<br>注意,Git 保存的不是文件差异或者变化量,而只是一系列文件快照,并使用一个 commit 来指向它们。</p>
</li>
<li><p>push 将本地仓库的代码提交到远程仓库</p>
</li>
</ul>
<h3 id="索引"><a href="#索引" class="headerlink" title="索引"></a>索引</h3><h3 id="分支"><a href="#分支" class="headerlink" title="分支"></a>分支</h3><h2 id="命令"><a href="#命令" class="headerlink" title="命令"></a>命令</h2><h3 id="status"><a href="#status" class="headerlink" title="status"></a>status</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ git status -s # 短版status</span><br></pre></td></tr></table></figure>
<h3 id="diff(比较文件)"><a href="#diff(比较文件)" class="headerlink" title="diff(比较文件)"></a>diff(比较文件)</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">git diff --cached # ,同--staged</span><br><span class="line">git diff branch1 branch2 --stat //显示出所有有差异的文件列表</span><br><span class="line">git diff branch1 branch2 文件名(带路径) //显示指定文件的详细差异</span><br><span class="line">git diff branch1 branch2 //显示出所有有差异的文件的详细差异</span><br></pre></td></tr></table></figure>
<h3 id="log(显示提交历史)"><a href="#log(显示提交历史)" class="headerlink" title="log(显示提交历史)"></a>log(显示提交历史)</h3><p><a target="_blank" rel="noopener" href="http://blog.csdn.net/u011240877/article/details/52586664">对比分支差异</a><br>列出最近两次提交引入的更改(-p 相当于 diff 命令)</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ git log -p -2</span><br></pre></td></tr></table></figure>
<p>其他选项</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">$ git log --stat # 列出每次提交的state(相当于加state命令)</span><br><span class="line">$ git log --pretty=??? # 以某种格式化输出log</span><br><span class="line">$ git log --since=2.weeks # 打印最近2周的log</span><br><span class="line">$ git log -S function_name # 过滤出对function_name字符串有修改的commit,另外在log最后加--file,可以限制只打印对file有修改的commit</span><br><span class="line">--decorate:在结果中显示当前所处的branch</span><br><span class="line">--graph:以更直观的方式区别不同的branch</span><br></pre></td></tr></table></figure>
<p>打印出炫酷的效果:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative</span><br></pre></td></tr></table></figure>
<h3 id="ignore"><a href="#ignore" class="headerlink" title="ignore"></a>ignore</h3><p>.gitignore 文件中的规则匹配的文件会被 git 忽略,但是文件事先要从索引中删除。</p>
<h3 id="config"><a href="#config" class="headerlink" title="config"></a>config</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">$ git config --global credential.helper cache # 设置凭证缓存,以后就不用每次都输入密码了,但默认只保存15分钟</span><br><span class="line">$ git config credential.helper 'cache --timeout=3600' # 设置凭证保存一个小时</span><br><span class="line">$ git config --global credential.helper store # 长期存储</span><br></pre></td></tr></table></figure>
<h3 id="add(建立索引)"><a href="#add(建立索引)" class="headerlink" title="add(建立索引)"></a>add(建立索引)</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git add .</span><br></pre></td></tr></table></figure>
<h3 id="unmodifying(已修改-未修改)"><a href="#unmodifying(已修改-未修改)" class="headerlink" title="unmodifying(已修改->未修改)"></a>unmodifying(已修改->未修改)</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">git checkout .</span><br><span class="line">$ git checkout -- <file>... # 若已tracked的文件被修改,可以使用这条命令恢复到未修改时的情况</span><br><span class="line">git reset --hard</span><br></pre></td></tr></table></figure>
<h3 id="commit(提交)"><a href="#commit(提交)" class="headerlink" title="commit(提交)"></a>commit(提交)</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ git commit -a # 自动add并提交追踪过的所有文件</span><br><span class="line">$ git commit --amend # 覆盖上一次的commit,比如可以修改commit message,也可以删除一些文件的索引后再次进行提交,在误提交一些配置文件后可以这样挽救</span><br></pre></td></tr></table></figure>
<h3 id="unstage(撤销-add,已暂存-已修改)"><a href="#unstage(撤销-add,已暂存-已修改)" class="headerlink" title="unstage(撤销 add,已暂存->已修改)"></a>unstage(撤销 add,已暂存->已修改)</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">$ git reset HEAD <file>... # 撤销上一次的add</span><br><span class="line">$ git rm -rf --cached [文件] # 仅删除索引,不删除,-r递归,-f强行移除</span><br><span class="line">$ git rm -rf [文件] # 从工作目录和跟踪列表中删除</span><br></pre></td></tr></table></figure>
<h3 id="tag"><a href="#tag" class="headerlink" title="tag"></a>tag</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">$ git tag # 显示所有标签</span><br><span class="line">$ git tag -a v1.4 -m "my version 1.4" # 给最近一次的commit加一个注释标签(相当于一个节点)</span><br><span class="line">$ git show <tag-name> # 显示tag和被tag的commit的信息</span><br><span class="line">$ git tag v1.0-lw # 加一个轻量标签,仅仅在文件中记录最近一次commit的checksum</span><br><span class="line">$ git tag -a v1.2 <checksum> # 在后面指定某个commit的完整(或部分)checksum也可以加一个标签,checksum可以使用$ git log --pretty=oneline得到</span><br><span class="line">$ git push origin [tagname] # 将某个标签推送到远程服务器中</span><br><span class="line">$ git push origin --tags # 将所有标签推送到远程服务器</span><br><span class="line">$ git checkout -b [branchname] [tagname] # 转换到另一branch</span><br></pre></td></tr></table></figure>
<h3 id="aliase"><a href="#aliase" class="headerlink" title="aliase"></a>aliase</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">$ git config --global alias.co checkout</span><br><span class="line">$ git config --global alias.br branch</span><br><span class="line">$ git config --global alias.ci commit</span><br><span class="line">$ git config --global alias.st status</span><br><span class="line">$ git config --global alias.unstage 'reset HEAD --'</span><br><span class="line">$ git config --global alias.last 'log -1 HEAD'</span><br></pre></td></tr></table></figure>
<p>以后就可以使用 git ci 来 commit 了</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ git config --global alias.visual '!gitk'</span><br></pre></td></tr></table></figure>
<p>为自己写的工具设置别名</p>
<h3 id="push"><a href="#push" class="headerlink" title="push"></a>push</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">$ git push origin serverfix:awesomebranch # 将serverfix代表的分支推到远程origin的awesomebranch分支上</span><br><span class="line">$ git push origin --delete serverfix # 删除服务器上的一个分支</span><br><span class="line">$ git push --set-upstream origin master # 将当前分支的提交上传到远程仓库的某个分支并与其建立跟踪</span><br><span class="line">$ git push -u origin master # 同上</span><br></pre></td></tr></table></figure>
<h3 id="remote"><a href="#remote" class="headerlink" title="remote"></a>remote</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">$ git remote # 显示远程服务器名,默认赋名origin</span><br><span class="line">$ git remote -v # 显示需要从该远程主机读/写时可以使用的URL</span><br><span class="line">$ git remote add <shortname> <url> # 添加一个可用的远程仓库</span><br><span class="line">$ git fetch [remote-name] # 获取远程仓库有而本地仓库没有的信息,但不merge</span><br><span class="line">$ git pull # fetch并merge</span><br><span class="line">$ git push [remote-name] [branch-name] # 向有写权限的主机push数据</span><br><span class="line">$ git remote show [remote-name] # 显示远程仓库的详细信息</span><br><span class="line">$ git remote rename [old] [new] # 重命名仓库的shortname</span><br><span class="line">$ git remote rm [shortname] # 移除远程仓库</span><br></pre></td></tr></table></figure>
<h3 id="branch"><a href="#branch" class="headerlink" title="branch"></a>branch</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">$ git branch -v # 显示每个branch的最后一个commit</span><br><span class="line">$ git branch --merged # 过滤branch,只显示并入到当前branch的branches,同样的还有--no-merged</span><br><span class="line">$ git branch -u origin/serverfix # 改变当前分支track的上流分支</span><br><span class="line">$ git branch -vv # 查看每个本地分支track的服务器分支(只和最近一次fetch比较)</span><br><span class="line">$ git branch -r # 查看远程分支列表</span><br><span class="line">$ git branch -D [branch] # 强行删除分支,不管分支有没有被并进来</span><br></pre></td></tr></table></figure>
<h3 id="checkout"><a href="#checkout" class="headerlink" title="checkout"></a>checkout</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">$ git checkout -b [branch] [remotename]/[branch] # 在本地创建一个新分支,与远程的一个分支同步</span><br><span class="line">$ git checkout --track origin/serverfix # 上面的缩写</span><br><span class="line">$ git checkout serverfix # 上面的缩写</span><br><span class="line">$ git checkout -b sf origin/serverfix # 如果将要创建的本地分支与所要track的远程分支不同名</span><br><span class="line">撤销文件的修改(还未add的文件)</span><br></pre></td></tr></table></figure>
<h3 id="rebase(衍合)和-merge(合并)"><a href="#rebase(衍合)和-merge(合并)" class="headerlink" title="rebase(衍合)和 merge(合并)"></a>rebase(衍合)和 merge(合并)</h3><ol>
<li>实现方式:rebase 和 merge 都是用来在推送之前整合提交历史的,但是实现的方式却不同,rebase 先找出两个分支的公共祖先,然后将一个分支的从该节点之后的所有提交都当成补丁应用到另一个分支上;merge 同样是先找到分支的公共祖先,然后对两个分支的最新提交进行合并???,将合并中修改的内容生成一个新的 commit。</li>
<li>冲突解决:rebase 和 merge 在实施过程中都有可能会出现冲突的情况,merge 遇见冲突后会直接停止,等待手动解决冲突并重新提交 commit 后,才能再次 merge;而 rebase 遇见冲突后会暂停当前操作,开发者可以选择手动解决冲突、add 更新索引,然后 git rebase –continue 继续,或者 –skip 跳过(注意此操作中当前分支的修改会直接覆盖目标分支的冲突部分),亦或者 –abort 直接停止该次 rebase 操作。</li>
<li>pull 命令其实相当于 fetch+merge,可以通过在后面加上 <code>--rebase</code> 选项来指定为 rebase 操作,或者先 fetch,之后再考虑使用 merge 还是 rebase。</li>
<li>不要 rebase 已经公开的提交对象,因为它会舍弃当前分支已经提交的 commit,对别人来说就像该分支被回滚了一样,如果 pull 了可能就会出问题。<br><a target="_blank" rel="noopener" href="https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging#Basic-Merge-Conflicts">https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging#Basic-Merge-Conflicts</a></li>
<li>当有修改未 commit 时,不能进行 rebase 操作,此时可以考虑先用 git stash 命令暂存;但是 merge 可能会直接将未 commit 的内容覆盖掉。<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">$ git rebase b # 嫁接过去,将当前分支里的补丁应用到目标分支的最后一个提交对象上,也就是在目标分支的最后一个commit的基础上重演一遍修改,最后将当前分支的???指过去</span><br><span class="line">$ git rebase --onto master server client # 将分支server上的另一分支client衍合到master上</span><br><span class="line">$ git rebase master server # 将server分支衍合到master中来</span><br><span class="line">$ git rebase -i b # 显示详细信息,包括各commit会被连接到目标分支的哪个commit后面,并且可以指定命令(策略pick、reword、edit、squash、fixup、exec)???????,默认为pick</span><br><span class="line">$ git merge b # 将目标分支合并进来</span><br><span class="line">$ git merge --ff-only # ff的意思是fast-forward,这种情况下要么当前分支已经是最新的了、要么合并是可以fast-forward的(只移动分支指针),默认情况下是--no-ff,也就是普通的合并</span><br></pre></td></tr></table></figure></li>
</ol>
<h3 id="stash"><a href="#stash" class="headerlink" title="stash"></a>stash</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">$ git stash apply # 使用最近一次的stash记录来还原当前分支</span><br><span class="line">$ git stash clear # 清空stash表</span><br></pre></td></tr></table></figure>
<h3 id="reset"><a href="#reset" class="headerlink" title="reset"></a>reset</h3><h3 id="统计代码量"><a href="#统计代码量" class="headerlink" title="统计代码量"></a>统计代码量</h3><p>统计每个人的代码量:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done</span><br></pre></td></tr></table></figure>
<p>统计某个人某段时间内的代码量:</p>
<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">git log --since='2019-01-15' --until='2019-12-31' --format='%aN' | sort -u |</span><br><span class="line">while read name; do echo -en "$name,";</span><br><span class="line">git log --since='2019-01-15' --until='2019-12-31' --author="$name" --numstat</span><br><span class="line">--pretty=tformat: --no-merges | awk '{ add += $1; subs += $2; loc += $1 - $2 }</span><br><span class="line">END { printf "added lines, %s, removed lines, %s, total lines, %s\n", add, subs,</span><br><span class="line">loc }' -; done >> XXX_19_12_31_code.csv;</span><br></pre></td></tr></table></figure>
<h3 id="回滚"><a href="#回滚" class="headerlink" title="回滚"></a>回滚</h3><p>Git 支持对本地代码库或远程代码库回滚。<br>参考:<a target="_blank" rel="noopener" href="https://blog.csdn.net/u013399759/article/details/52212436">git 远程分支回滚</a></p>
<h2 id="工作流"><a href="#工作流" class="headerlink" title="工作流"></a>工作流</h2><p>首先 master 分支即发布的版本,在此上分出一个 develop(huang)版本,每次发布任务时,在 develop 的基础上分出 liu、du、zhou、shen,完成各自的任务,完成后合并到 develop 上。<br>若 master 上出 bug 了就直接分出一个 hotfix 分支,修复后马上合并到 master 和 develop 上。<br>开发完成后(即 liu、du、zhou、shen 等的分支都已合并进 develop)在 develop 上分出一个 release,进行测试,最后合并到 master 上。</p>
<h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ol>
<li><a target="_blank" rel="noopener" href="http://eagain.net/articles/git-for-computer-scientists/">git-for-computer-scientists</a></li>
<li><a target="_blank" rel="noopener" href="https://git-scm.com/doc">git - Documentation</a></li>
<li><a target="_blank" rel="noopener" href="https://github.com/github/gitignore">常用.gitignore</a></li>
<li><a target="_blank" rel="noopener" href="https://www.cnblogs.com/flying_bat/p/3408634.html">Git 少用 Pull 多用 Fetch 和 Merge</a></li>
<li><a target="_blank" rel="noopener" href="https://www.jianshu.com/p/c17472d704a0">闲谈 git merge 与 git rebase 的区别</a></li>
<li><a target="_blank" rel="noopener" href="https://www.jb51.net/article/192136.htm">解决git误commit大文件导致不能push问题</a></li>
</ol>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/kity@2.0.4/dist/kity.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/kityminder-core@1.4.50/dist/kityminder.core.min.js"></script><script defer="true" type="text/javascript" src="https://cdn.jsdelivr.net/npm/hexo-simple-mindmap@0.6.0/dist/mindmap.min.js"></script><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/hexo-simple-mindmap@0.6.0/dist/mindmap.min.css">
</div>
<footer class="post-footer">
<div class="post-tags">
<a href="/tags/Git/" rel="tag"># Git</a>
</div>
<div class="post-nav">
<div class="post-nav-item">
<a href="/f5844402.html" rel="prev" title="Java-集合框架">
<i class="fa fa-angle-left"></i> Java-集合框架
</a>
</div>
<div class="post-nav-item">
<a href="/d8d2dc24.html" rel="next" title="淘淘网络商城">
淘淘网络商城 <i class="fa fa-angle-right"></i>
</a>
</div>
</div>
</footer>
</article>
</div>
</div>
</main>
<footer class="footer">
<div class="footer-inner">
<div class="copyright">
©
<span itemprop="copyrightYear">2025</span>
<span class="with-love">
<i class="fa fa-heart"></i>
</span>
<span class="author" itemprop="copyrightHolder">tallate</span>
</div>
<div class="powered-by">由 <a href="https://hexo.io/" rel="noopener" target="_blank">Hexo</a> & <a href="https://theme-next.js.org/" rel="noopener" target="_blank">NexT.Gemini</a> 强力驱动
</div>
</div>
</footer>
<div class="back-to-top" role="button" aria-label="返回顶部">
<i class="fa fa-arrow-up fa-lg"></i>
<span>0%</span>
</div>
<a href="https://github.com/tallate" class="github-corner" title="在 GitHub 上关注我" aria-label="在 GitHub 上关注我" rel="noopener" target="_blank"><svg width="80" height="80" viewBox="0 0 250 250" aria-hidden="true"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path></svg></a>
<noscript>
<div class="noscript-warning">Theme NexT works best with JavaScript enabled</div>
</noscript>
<script src="https://cdnjs.cloudflare.com/ajax/libs/animejs/3.2.1/anime.min.js" integrity="sha256-XL2inqUJaslATFnHdJOi9GfQ60on8Wx1C2H8DYiN1xY=" crossorigin="anonymous"></script>
<script src="/js/comments.js"></script><script src="/js/utils.js"></script><script src="/js/motion.js"></script><script src="/js/next-boot.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/hexo-generator-searchdb/1.4.1/search.js" integrity="sha256-1kfA5uHPf65M5cphT2dvymhkuyHPQp5A53EGZOnOLmc=" crossorigin="anonymous"></script>
<script src="/js/third-party/search/local-search.js"></script>
<script class="next-config" data-name="mermaid" type="application/json">{"enable":true,"version":"7.1.2","options":null,"js":{"url":"https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.3.0/mermaid.min.js","integrity":"sha256-9y71g5Lz/KLsHjB8uXwnkuWDtAMDSzD/HdIbqhJfTAI="}}</script>
<script src="/js/third-party/tags/mermaid.js"></script>
</body>
</html>