你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Git命令——每位程序员必备的基础

[复制链接]
gaosmile 发布时间:2020-10-29 18:41
前言
掌握Git命令是每位程序员必备的基础,之前一直是用smartGit工具,直到看到大佬们都是在用Git命令操作的,回想一下,发现有些Git命令我都忘记了,于是写了这篇博文,复习一下~
文章目录
  • Git是什么?
  • Git的相关理论基础
  • 日常开发中,Git的基本常用命令
  • Git进阶之分支处理
  • Git进阶之处理冲突
  • Git进阶之撤销与回退
  • Git进阶之标签tag
  • Git其他一些经典命令
    : f+ P! K  `* X% b2 F' P( ~. ~* P! _
Git是什么
在回忆Git是什么的话,我们先来复习这几个概念哈~
什么是版本控制?
百度百科定义是酱紫的~

版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。

”
那些年,我们的毕业论文,其实就是版本变更的真实写照...脑洞一下,版本控制就是这些论文变更的管理~ 微信图片_20201029183219.png
什么是集中化的版本控制系统?
那么,集中化的版本控制系统又是什么呢,说白了,就是有一个集中管理的中央服务器,保存着所有文件的修改历史版本,而协同开发者通过客户端连接到这台服务器,从服务器上同步更新或上传自己的修改。
微信图片_20201029183223.png
. S/ t% j8 D1 B9 m; _2 J2 ~: f

- w; G8 U. d- b; a& W什么是分布式版本控制系统?
分布式版本控制系统,就是远程仓库同步所有版本信息到本地的每个用户。嘻嘻,这里分三点阐述吧:
  • 用户在本地就可以查看所有的历史版本信息,但是偶尔要从远程更新一下,因为可能别的用户有文件修改提交到远程哦。
  • 用户即使离线也可以本地提交,push推送到远程服务器才需要联网。
  • 每个用户都保存了历史版本,所以只要有一个用户设备没问题,就可以恢复数据啦~
    2 Q; g# |0 s0 k8 ]
微信图片_20201029183226.png : f* g) s8 M, d1 Z8 y- w$ Q5 z/ `
9 O/ W( M$ h6 X2 M

  ]' {& c7 H; D4 T+ v什么是Git?
Git是免费、开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
微信图片_20201029183230.png + D  a" K- k! a- r7 J
; O$ A# s7 o5 {0 n( ^# |" C

8 C# F% H4 @" a) y+ KGit的相关理论基础
  • Git的四大工作区域
  • Git的工作流程
  • Git文件的四种状态
  • 一张图解释Git的工作原理
    ( j4 c- \. f2 Z- z& D9 S9 _9 {8 n% l' b
Git的四大工作区域
先复习Git的几个工作区域哈:
微信图片_20201029183234.png
  • Workspace:你电脑本地看到的文件和目录,在Git的版本控制下,构成了工作区。
  • Index/Stage:暂存区,一般存放在 .git目录下,即.git/index,它又叫待提交更新区,用于临时存放你未提交的改动。比如,你执行git add,这些改动就添加到这个区域啦。
  • Repository:本地仓库,你执行git clone 地址,就是把远程仓库克隆到本地仓库。它是一个存放在本地的版本库,其中HEAD指向最新放入仓库的版本。当你执行git commit,文件改动就到本地仓库来了~
  • Remote:远程仓库,就是类似github,码云等网站所提供的仓库,可以理解为远程数据交换的仓库~
    . n4 U, Y0 n! h2 s6 H; ]( F. ]
Git的工作流程
上一小节介绍完Git的四大工作区域,这一小节呢,介绍Git的工作流程咯,把git的操作命令和几个工作区域结合起来,个人觉得更容易理解一些吧,哈哈,看图:
微信图片_20201029183237.png
git 的正向工作流程一般就这样:
  • 从远程仓库拉取文件代码回来;
  • 在工作目录,增删改查文件;
  • 把改动的文件放入暂存区;
  • 将暂存区的文件提交本地仓库;
  • 将本地仓库的文件推送到远程仓库;- ~% d- l! \9 y7 G4 s0 e
Git文件的四种状态
根据一个文件是否已加入版本控制,可以把文件状态分为:Tracked(已跟踪)和Untracked(未跟踪),而tracked(已跟踪)又包括三种工作状态:Unmodified,Modified,Staged
微信图片_20201029183241.png
  • Untracked: 文件还没有加入到git库,还没参与版本控制,即未跟踪状态。这时候的文件,通过git add 状态,可以变为Staged状态
  • Unmodified:文件已经加入git库, 但是呢,还没修改, 就是说版本库中的文件快照内容与文件夹中还完全一致。Unmodified的文件如果被修改, 就会变为Modified. 如果使用git remove移出版本库, 则成为Untracked文件。
  • Modified:文件被修改了,就进入modified状态啦,文件这个状态通过stage命令可以进入staged状态
  • staged:暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodified状态.2 N0 G( ]  ]" D# ~5 s; a4 E5 ?3 @- u, U
一张图解释Git的工作原理
! Q6 X7 Q# D3 X5 C 微信图片_20201029183244.png
6 _2 L% K9 f2 B4 p! |" U$ P9 R( w$ p1 [# a9 U; x* P' C

" j8 ]" p2 [7 u日常开发中,Git的基本常用命令
  • git clone
  • git checkout -b dev
  • git add
  • git commit
  • git log
  • git diff
  • git status
  • git pull/git fetch
  • git push! p, G5 R6 b# e" S9 X" I
这个图只是模拟一下git基本命令使用的大概流程哈~
微信图片_20201029183247.png
git clone
当我们要进行开发,第一步就是克隆远程版本库到本地呢
  • git clone url  克隆远程版本库! ~& d7 T8 }2 K$ `6 _, r
) B0 J1 {( \6 l) O' g+ ?  C; ~
微信图片_20201029183250.png 1 F: Y; j* C4 W2 y3 j; j- X! ^

6 p2 B9 X! f5 |: H& _* X: P% q: q" G
6 |8 E- @1 a: X6 D0 J
git checkout -b dev
克隆完之后呢,开发新需求的话,我们需要新建一个开发分支,比如新建开发分支dev
创建分支:
  • git checkout -b dev   创建开发分支dev,并切换到该分支下
    ) u5 s, |/ K* Y# p; ~
" L8 A5 P1 \" l
微信图片_20201029183253.png
% F* \. Q0 a8 |! U% \
) ]: l( M6 ^7 |# m0 b
5 _: p  u  L- d0 V5 p
git add
git add的使用格式:
  1. 2 J) K7 Z! d3 r
  2. git add .        添加当前目录的所有文件到暂存区: U0 G; t" |' `
  3. git add [dir]        添加指定目录到暂存区,包括子目录
    : W# }( N1 w3 {1 ^& t
  4. git add [file1]        添加指定文件到暂存区
复制代码

5 }6 B: ?$ i3 q. g2 B7 F7 n8 L, t5 e9 z
有了开发分支dev之后,我们就可以开始开发啦,假设我们开发完HelloWorld.java,可以把它加到暂存区,命令如下
  • git add Hello.java  把HelloWorld.java文件添加到暂存区去
    , O# G" p! [7 h2 r! X3 r

( ~- j. o: W% E, b 微信图片_20201029183257.png
6 z/ T- s% B# K! e- L6 E
" n& p3 \+ K5 d

, S' U4 a0 s% a  Rgit commit
git commit的使用格式:

  1. 0 V. t: w6 w  q# M6 ]! J
  2. git commit -m [message] 提交暂存区到仓库区,message为说明信息1 o6 H% A7 X1 t" a
  3. git commit [file1] -m [message] 提交暂存区的指定文件到本地仓库
    % {+ o- X1 B) _* k& @8 Y, N  K
  4. git commit --amend -m [message] 使用一次新的commit,替代上一次提交
复制代码

+ e5 N# o4 m3 j) C
把HelloWorld.java文件加到暂存区后,我们接着可以提交到本地仓库啦~
  • git commit -m 'helloworld开发'4 }5 ?3 m" j! n, R+ ~/ b  \" u

, F. `" P' Y6 D( L 微信图片_20201029183301.png + r. c4 D3 G* G9 v0 Y: p& k' N
* B; ?9 a" O/ ^; s; U
  e2 C8 r) k- v- W& w8 [5 g
git status
git status,表示查看工作区状态,使用命令格式:
  1. 8 I7 r9 z8 T* c4 N! y9 |( P
  2. git status  查看当前工作区暂存区变动6 O: p1 t8 _3 T3 m) [0 j
  3. git status -s  查看当前工作区暂存区变动,概要信息
    6 A9 |7 k4 F& x: E9 R/ M3 x
  4. git status  --show-stash 查询工作区中是否有stash(暂存的文件)
复制代码
# N9 A: U/ v! s6 w4 t' l
当你忘记是否已把代码文件添加到暂存区或者是否提交到本地仓库,都可以用git status看看哦~ 微信图片_20201029183305.png
git log
git log,这个命令用得应该比较多,表示查看提交历史/提交日志~
  1. 7 Q) r1 t, }$ z. c- k: k' ]0 n3 k/ u
  2. git log  查看提交历史* k8 r, r! ^$ {3 @( i+ C4 J
  3. git log --oneline 以精简模式显示查看提交历史9 B; Y, R- K5 ^
  4. git log -p <file> 查看指定文件的提交历史: ]# ~& P. E6 A9 ?0 z
  5. git blame <file> 一列表方式查看指定文件的提交历史
复制代码

+ z- T5 Y( i! u4 A! z
嘻嘻,看看dev分支上的提交历史吧~要回滚代码就经常用它喵喵提交历史~
微信图片_20201029183308.png
git diff
* A) `# r( J8 ~! r
  1. 1 r0 S' W6 y) U' K7 N4 N
  2. git diff 显示暂存区和工作区的差异
    * l3 }! M* _) ]' t/ U5 p7 O( v
  3. git diff filepath   filepath路径文件中,工作区与暂存区的比较差异
    ) c0 k. F% \" T% n# i+ y, }
  4. git diff HEAD filepath 工作区与HEAD ( 当前工作分支)的比较差异
    # c) N) ~: J$ @. p5 p
  5. git diff branchName filepath 当前分支的文件与branchName分支的文件的比较差异
    & x; q: ^( G- B  Z
  6. git diff commitId filepath 与某一次提交的比较差异
复制代码
" y, L1 ]0 G% u& c( A
如果你想对比一下你改了哪些内容,可以用git diff对比一下文件修改差异哦
微信图片_20201029183311.png
git pull/git fetch) p  L# I4 q2 {+ x7 O, o$ F

  1. ( m: E% R0 p  X2 U( j/ ^
  2. git pull  拉取远程仓库所有分支更新并合并到本地分支。, a! M3 Z% Y! ?8 E: m- t6 x
  3. git pull origin master 将远程master分支合并到当前本地分支
    0 m7 v2 l7 Z0 v% T  q: B/ u
  4. git pull origin master:master 将远程master分支合并到当前本地master分支,冒号后面表示本地分支0 v" T# }' Q! \8 H
  5. ( }+ t/ k- ]. K7 V
  6. git fetch --all  拉取所有远端的最新代码
    6 J' \( n% ^; I* [
  7. git fetch origin master 拉取远程最新master分支代码
复制代码

: b; `4 \% z+ x0 U$ H6 [. |
我们一般都会用git pull拉取最新代码看看的,解决一下冲突,再推送代码到远程仓库的。
微信图片_20201029183314.png

有些伙伴可能对使用git pull还是git fetch有点疑惑,其实 git pull = git fetch+ git merge。pull的话,拉取远程分支并与本地分支合并,fetch只是拉远程分支,怎么合并,可以自己再做选择。


' d0 _4 m( C9 F" m
git push
git push 可以推送本地分支、标签到远程仓库,也可以删除远程分支哦。
  1. ! v1 w) [, b+ u3 A7 Y$ v' M
  2. git push origin master 将本地分支的更新全部推送到远程仓库master分支。: R" F  E2 _! q/ H0 n; `4 {
  3. git push origin -d <branchname>   删除远程branchname分支7 k6 J" D% t9 C9 m
  4. git push --tags 推送所有标签
复制代码
1 `: ~) A8 v* z6 Y+ |9 g; u
如果我们在dev开发完,或者就想把文件推送到远程仓库,给别的伙伴看看,就可以使用git push origin dev~
微信图片_20201029183317.png
Git进阶之分支处理
Git一般都是存在多个分支的,开发分支,回归测试分支以及主干分支等,所以Git分支处理的命令也需要很熟悉的呀~
  • git branch
  • git checkout
  • git merge* E% T9 n% I& J4 d: A
git branch
git branch用处多多呢,比如新建分支、查看分支、删除分支等等
新建分支:
  1. & }! P1 |% c: k- l+ K) ?: i% Z! b
  2. git checkout -b dev2  新建一个分支,并且切换到新的分支dev24 y6 H0 X! D7 u+ K: {
  3. git branch dev2 新建一个分支,但是仍停留在原来分支
复制代码
微信图片_20201029183321.png
查看分支:

  1. ' Y! O# x' j( j& a1 ?  o9 F
  2. git branch    查看本地所有的分支( D" M! `6 W' C3 E: H& \' z8 h
  3. git branch -r  查看所有远程的分支
    + @/ k  p5 t8 i" ~' Z
  4. git branch -a  查看所有远程分支和本地分支
复制代码
微信图片_20201029183324.png
删除分支:
  • git branch -D <branchname>  删除本地branchname分支
    : B1 I5 Y* T- i' W
3 \7 n0 k# M3 G
微信图片_20201029183328.png
) O# f( ?8 Y6 s) l
" v% N7 o! _: E7 d9 x, z
" _% ~2 l# S3 \* {3 f8 j
git checkout
切换分支:
  • git checkout master 切换到master分支
    4 ], G6 p- Z# p2 S% P
; c- O8 Z1 Y  L0 `" K$ P/ z
微信图片_20201029183331.png 5 z9 `1 J* S! Z5 R3 y8 r. a

/ h" O3 [) _, C9 t' j
( ]& A. R% Y7 V' T& d- Z0 r8 y
git merge
我们在开发分支dev开发、测试完成在发布之前,我们一般需要把开发分支dev代码合并到master,所以git merge也是程序员必备的一个命令。

  1. : z  B1 Z! p" n2 _  E
  2. git merge master  在当前分支上合并master分支过来
    5 a9 I; B) E) j, t" g! y
  3. git merge --no-ff origin/dev  在当前分支上合并远程分支dev$ ?8 V, H0 L5 c+ ]4 F
  4. git merge --abort 终止本次merge,并回到merge前的状态
复制代码
4 r6 A! N: n* A! u( E2 s5 z
比如,你开发完需求后,发版需要把代码合到主干master分支,如下:
微信图片_20201029183334.png
Git进阶之处理冲突
Git版本控制,是多个人一起搞的,多个分支并存的,这就难免会有冲突出现~
Git合并分支,冲突出现
同一个文件,在合并分支的时候,如果同一行被多个分支或者不同人都修改了,合并的时候就会出现冲突。
举个粟子吧,我们现在在dev分支,修改HelloWorld.java文件,假设修改了第三行,并且commit提交到本地仓库,修改内容如下:
  1. ; ]: H# n" o$ I4 x
  2. public class HelloWorld {/ D7 q3 r( R6 W0 R
  3.     public static void main(String[] args) {- P  y: s! ]" [! ?
  4.         System.out.println("Hello,捡田螺的小男孩!");! Z3 Y: \# {0 J8 b+ o7 X! |
  5.     }
    , V' j! u$ f9 W( w" I' K
  6. }
复制代码
& ^9 T  T; W) |( X: U
我们切回到master分支,也修改HelloWorld.java同一位置内容,如下:

  1. 2 n9 i+ q" @# {2 t; c
  2. public class HelloWorld {
    + B" z) w3 z7 ?' c0 X$ Z
  3.     public static void main(String[] args) {
    3 Y$ r" i/ @1 X* G  ~0 b
  4.         System.out.println("Hello,jay!!");
    & o9 V$ |! [2 u: \8 D% g. H
  5.     }* {4 b. L2 x! J4 b" j& w( V
  6. }
复制代码

4 W# W0 Q8 y) G% @0 T7 H% X/ H
再然后呢,我们提交一下master分支的这个改动,并把dev分支合并过下,就出现冲突啦,如图所示:
微信图片_20201029183338.png * V; W6 [" A, h) ^' z% @& C
: ?. a5 ^' N2 b) X1 S
3 {: p! ]4 M& a$ i. V
Git解决冲突
Git 解决冲突步骤如下:
  • 查看冲突文件内容
  • 确定冲突内容保留哪些部分,修改文件
  • 重新提交,done% ?4 i! c  K. f9 a  F- y
1.查看冲突文件内容
git merge提示冲突后,我们切换到对应文件,看看冲突内容哈,,如下:
微信图片_20201029183341.png
2.确定冲突内容保留哪些部分,修改文件
  • Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,
  • <<<<<<<HEAD是指主分支修改的内容,>>>>>>> dev是指dev分支上修改的内容
    * \. }: B- X) M4 J0 N* Q1 l- z! N
所以呢,我们确定到底保留哪个分支内容,还是两个分支内容都保留呢,然后再去修改文件冲突内容~
3.修改完冲突文件内容,我们重新提交,冲突done
- b( `: |# `% y( C* M8 b 微信图片_20201029183344.png 5 X' o- n8 ?6 _" @) r/ f2 Y

% h" e# G6 {2 X  |8 s/ Y  s8 d
( H0 f' H% O; B6 U
Git进阶之撤销与回退
Git的撤销与回退,在日常工作中使用的比较频繁。比如我们想将某个修改后的文件撤销到上一个版本,或者想撤销某次多余的提交,都要用到git的撤销和回退操作。
代码在Git的每个工作区域都是用哪些命令撤销或者回退的呢,如下图所示:
微信图片_20201029183347.png
有关于Git的撤销与回退,一般就以下几个核心命令
  • git checkout
  • git reset
  • git revert5 d/ S4 C  e. ]( q9 U% y* e
git checkout
如果文件还在工作区,还没添加到暂存区,可以使用git checkout撤销

  1. 8 Z% j% y# k+ L! P3 R% ?- I* G
  2. git checkout [file]  丢弃某个文件file( O4 @9 O! g4 w1 V2 A
  3. git checkout .  丢弃所有文件
复制代码
+ E# C, S' g/ Y7 c
以下demo,使用git checkout -- test.txt 撤销了test.txt的修改
微信图片_20201029183350.png
git resetgit reset的理解

git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本.


% `' I3 k0 {: r& {7 [8 v/ `1 }+ [
为了更好地理解git reset,我们来回顾一下,Git的版本管理及HEAD的理解

Git的所有提交,会连成一条时间轴线,这就是分支。如果当前分支是master,HEAD指针一般指向当前分支,如下:


' N/ Y4 k) E. Y: Q
微信图片_20201029183353.png
假设执行git reset,回退到版本二之后,版本三不见了哦,如下:
微信图片_20201029183357.png
  v. A6 c7 Y" z3 g: C: S5 L8 K( O0 P  ^) h, d4 R' S

+ s1 Z, S7 o  P% O9 }9 v/ J6 Sgit reset的使用
Git Reset的几种使用模式
微信图片_20201029183400.png

  1. 9 U* G2 [) I1 {$ W" g8 O
  2. git reset HEAD --file% B9 F% S) d* I, V/ b; c
  3. 回退暂存区里的某个文件,回退到当前版本工作区状态
    3 F. H. G  P5 e# [4 c6 z5 @: R. o* m
  4. git reset –-soft 目标版本号 可以把版本库上的提交回退到暂存区,修改记录保留
    . @$ r2 Q3 ~6 n: R3 c. y! ^
  5. git reset –-mixed 目标版本号 可以把版本库上的提交回退到工作区,修改记录保留
    * E  F9 g+ b2 R2 P$ X- ~
  6. git reset –-hard  可以把版本库上的提交彻底回退,修改的记录全部revert。
复制代码

/ K. n/ C2 P* ]+ b- \% ]2 G
先看一个粟子demo吧,代码git add到暂存区,并未commit提交,可以酱紫回退,如下:

  1. ' v4 V. Y' `3 V  L. \7 D" A7 d
  2. git reset HEAD file 取消暂存1 r' k, Z5 j) ?: q- S
  3. git checkout file 撤销修改
复制代码
微信图片_20201029183403.png
再看另外一个粟子吧,代码已经git commit了,但是还没有push:
  1. ) ]/ H6 V) M! o6 B2 x6 _% W0 z
  2. git log  获取到想要回退的commit_id
    ' X/ d* y( r# A$ w$ P
  3. git reset --hard commit_id  想回到过去,回到过去的commit_id
复制代码
微信图片_20201029183407.png
如果代码已经push到远程仓库了呢,也可以使用reset回滚哦(这里大家可以自己操作实践一下哦)~
  1. 9 [( U6 m3 w0 a# G2 }  I3 i
  2. git log5 n% G" v9 z( S5 X6 d
  3. git reset --hard commit_id
    " s$ L& p  @* y: A1 {1 s  A1 B
  4. git push origin HEAD --force
复制代码
) V2 _- T3 L8 h) F

) _. B* U7 h( {5 I" U9 Tgit revert

与git reset不同的是,revert复制了那个想要回退到的历史版本,将它加在当前分支的最前端。

revert之前:
微信图片_20201029183410.png
revert 之后:
微信图片_20201029183413.png
当然,如果代码已经推送到远程的话,还可以考虑revert回滚呢
  1. , S8 r) n& V+ n3 J; U( W6 E
  2. git log  得到你需要回退一次提交的commit id
    0 B- ^, ?$ Y4 l' I* ~3 h+ w# \
  3. git revert -n <commit_id>  撤销指定的版本,撤销也会作为一次提交进行保存
复制代码
微信图片_20201029183417.png 9 T. {2 o6 E! y
! M4 H( X9 q/ a% o) |- O

. L1 H/ ]/ X. J* }3 |Git进阶之标签tag
打tag就是对发布的版本标注一个版本号,如果版本发布有问题,就把该版本拉取出来,修复bug,再合回去。

  1. $ x* u: h( |3 x; f7 N
  2. git tag  列出所有tag
    8 K6 {0 i' a3 F  h+ ~
  3. git tag [tag] 新建一个tag在当前commit: }$ d6 J9 G6 z0 h- ?/ b, `
  4. git tag [tag] [commit] 新建一个tag在指定commit
    8 b$ ^1 `3 \5 h8 o9 Y% L' X
  5. git tag -d [tag] 删除本地tag5 m* n) b" e- K0 w' Q
  6. git push origin [tag] 推送tag到远程* H' E9 X) @# o9 Y
  7. git show [tag] 查看tag/ S$ w+ X3 a- N& j$ Y" d7 Q
  8. git checkout -b [branch] [tag] 新建一个分支,指向某个tag
复制代码
微信图片_20201029183422.png
+ u4 @# ?5 q6 y9 L/ R, A6 W, F
- y! c  p4 I1 T! H

" u* ?& S- t+ C9 I% r$ ]" OGit其他一些经典命令git rebase
rebase又称为衍合,是合并的另外一种选择。
假设有两个分支master和test

  1. # v% X' V. Z# J9 J& u& I" |
  2.       D---E test; v6 F4 L- r. C; c. M7 r$ n
  3.       /( |7 e# f& j& q% o) j
  4. A---B---C---F--- master
复制代码

/ z* {  _6 a0 @- B
执行 git merge test得到的结果
  1.   y8 F* d# D  k# k
  2.        D--------E
    6 l- @9 }/ T9 Y; ~, _5 h: N, ]
  3.       /          \0 {: T. d- B: A0 v
  4. A---B---C---F----G---   test, master
复制代码
$ m. N' ?* u( }/ r( C6 |* L( A+ v! ?, @
执行git rebase test,得到的结果
  • A---B---D---E---C‘---F‘---   test, master9 A  R5 b& P/ i) x
rebase好处是: 获得更优雅的提交树,可以线性的看到每一次提交,并且没有增加提交节点。所以很多时候,看到有些伙伴都是这个命令拉代码:git pull --rebase,就是因为想更优雅,哈哈
git stash
stash命令可用于临时保存和恢复修改

  1. - M/ P& w+ F3 m4 O; q% U; t
  2. git stash  把当前的工作隐藏起来 等以后恢复现场后继续工作4 ?! g- ^( \2 F; @
  3. git stash list 显示保存的工作进度列表- V( ~. r, X5 W; t1 y; v: W
  4. git stash pop stash@{num} 恢复工作进度到工作区
    - O. W( w% W9 P
  5. git stash show :显示做了哪些改动
    / d) `8 ^2 F& ~. z8 r
  6. git stash drop stash@{num} :删除一条保存的工作进度* V; @1 [9 y1 {) S1 r
  7. git stash clear 删除所有缓存的stash。
复制代码
微信图片_20201029183426.png
: P- _& [9 |3 l0 n" M1 Q7 c: C3 ^! y2 \  j+ T, }- h: q  e
" g0 w! i7 P! q6 m; u
git reflog
显示当前分支的最近几次提交
微信图片_20201029183431.png 6 ~! E# t5 q# ~  O( N

" y( @7 q, S+ m6 V8 ^. x$ D

9 E) U5 s3 u( y1 t% w% b9 M1 t$ _git blame filepath
git blame 记录了某个文件的更改历史和更改人,可以查看背锅人,哈哈
微信图片_20201029183434.png
git remote
1 q& d! M' i  [$ ~* h) d) f* N
  1. 6 J. \7 m$ T4 t. {
  2. git remote   查看关联的远程仓库的名称
    9 P1 q( V' `! {: k* k# @
  3. git remote add url   添加一个远程仓库
    3 C& @; P" n& [4 D- b
  4. git remote show [remote] 显示某个远程仓库的信息
复制代码

, q; L0 K  P  w: @/ Y1 u$ w  O2 J! n. V; l1 N& V0 p
赞 收藏 评论0 发布时间:2020-10-29 18:41

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版