IT运维管理,ITIL,ITSS,ITSM,ISO20000-ITIL先锋论坛

 找回密码
 立即注册 - 请先获取邀请码

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 269|回复: 0

Git指令大百科

[复制链接]
来自- 广东广州

参加活动:0

组织活动:12

发表于 2017-8-24 14:52:53 | 显示全部楼层 |阅读模式 来自- 广东广州
配置
9 A' x, B) h" }9 i0 }$ i: C
首先是配置帐号信息

4 y8 e4 B% I0 {) ]3 R
ssh -T git@github.com#登陆github

: U# e1 G$ B4 K9 Z/ H( f$ s
修改项目中的个人信息
7 w! S5 N+ y' K  P/ O
git config --global user.name "githelper"
git config --global user.email githelper@gmail.com

/ ^* P; z" x; y+ I* E
config
- g( @% Y+ v8 f( O
git config --global user.name JSLite#设置提交用户名
git config --global user.email JSLite@yeah.net#设置提交邮箱
git config --list#查看配置的信息
git remote remove origin#删除该远程路径
git remote add origin git@jslite.github.com:JSLite/JSLite.git#添加远程路径
9 d1 {& p" _1 W. ^/ {6 L' l
help

# t6 x8 D& i% F$ ~, f/ e
git help config#获取帮助信息

! u, _: n! H. T6 V
配置自动换行(自动转换坑太大)

2 X& ^, y8 D6 e" _1 z
git config --global core.autocrlf input#提交到git是自动将换行符转换为lf
! y! t1 N7 J# D/ i' n
配置密钥
, G+ @; [6 O: Q) E2 A; B' ^: `
ssh-keygen -t rsa -C JSLite@yeah.net#生成密钥
ssh -T git@github.com#测试是否成功

8 P1 G9 O. P1 F, n: a- h, Z0 H
多账号ssh配置

% b, g: P3 p& G- |0 u8 S
1.生成指定名字的密钥
ssh-keygen -t rsa -C "邮箱地址" -f ~/.ssh/github_jslite
会生成github_jslite和github_jslite.pub这两个文件
2.密钥复制到托管平台上
vim ~/.ssh/github_jslite.pub
打开公钥文件github_jslite.pub,并把内容复制至代码托管平台上
3.修改config文件
vim ~/.ssh/config#修改config文件,如果没有创建config
Host jslite.github.com
HostName github.com
User git
IdentityFile ~/.ssh/github_jslite
Host abc.github.com
HostName github.com
User git
IdentityFile ~/.ssh/github_abc
4.测试
ssh -T git@jslite.github.com#@后面跟上定义的Host

% b) A; J6 p0 R4 X1 h1 c- t( I

5 K6 S. `+ M$ P
push

4 h$ Y8 U& m/ O9 q3 |( s
git push origin master
git push -f origin master#强制推送
  n: P' @; G+ _
缩写 -f
全写--force
注:强制推送文件没有了哦
2 D, i$ M5 i) {" l3 U/ x1 ?' e) p
pull
' g2 i! ~- C' k9 h2 S0 s
只能拉取origin里的一个url地址,这个fetch-url
默认为你添加的到origin的第一个地址

; J! m) z; i1 j3 e
git pull origin master
git pull --all#获取远程所有内容包括tag
git pull origin next:master#取回origin主机的next分支,与本地的master分支合并
git pull origin next#远程分支是与当前分支合并

( V* V( b% i1 @( H) K6 g& z$ Z
上面一条命令等同于下面两条命令
* v7 X. X0 @+ b8 d
git fetch origin
git merge origin/next
- q) a( ^3 w; ?: C* W1 E
如果远程主机删除了某个分支,默认情况下,git pull 不会在拉取远程分支的时候,删除对应的本地分支。这是为了防止,由于其他人操作了远程主机,导致git pull不知不觉删除了本地分支。
: i) i+ }2 q% T
但是,你可以改变这个行为,加上参数 -p 就会在本地删除远程已经删除的分支。

; Q4 H; ]2 S7 g8 z% }( c
$ git pull -p
9 |) K- w5 F8 C' r  F
等同于下面的命令
, T5 f- _) h7 j) z) K
$ git fetch --prune origin
$ git fetch -p
4 R( M$ J" O7 H$ q$ H( W+ }- p) n

) J5 ~/ Q0 k6 a. L
新建仓库init
  y& Z% v$ P9 n9 C/ u7 g
git init#初始化
! l% T' W8 }/ k- @" S
status
, G) K0 |1 Y- M" U* }
git status#获取状态
; G2 h) _4 L, [$ V" |9 ^
add
2 f3 `* Z2 s  r+ }
git add file#.或*代表全部添加
git rm --cached 在commit之前撤销git add操作
git reset head好像比上面git rm --cached更方便

. Z; |8 ?- _& `
commit

# l( u/ V/ W2 b3 k! a  W
git commit -m "message"#此处注意乱码
+ Q. t' ^3 |2 s$ f4 s
remote

4 R. @0 I  `" c! p5 n* c
git remote add origin git@github.com:JSLite/test.git#添加源
# t, ^$ I! o. [
push

( l- S) k- _5 ]* W) M! b2 r, J
git push -u origin master#push同事设置默认跟踪分支
git push origin master

* V* l0 _) K5 }  t0 L7 x# D, [
从现有仓库克隆
/ _+ w/ A) P# O% g
git clone git://github.com/JSLite/JSLite.js.git
git clone git://github.com/JSLite/JSLite.js.git mypro#克隆到自定义文件夹
git clone [user@]example.com:path/to/repo.git/#SSH协议还有另一种写法。
- U1 U* _. l/ l5 O, n' P" r' Y
git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,下面是一些例子。$ git clone <版本库的网址> <本地目录名>

% [% i0 ?+ |3 Q* k. l% s; h
$ git clone http://example.com/path/to/repo.git/
$ git clone ssh://example.com/path/to/repo.git/
$ git clone git://example.com/path/to/repo.git/
$ git clone /opt/git/project.git
$ git clone file:///opt/git/project.git
$ git clone ftp://example.com/path/to/repo.git/
$ git clone rsync://example.com/path/to/repo.git/

# T6 m' S5 }4 A0 t( B; e/ V- x* F
submodule
5 V6 I3 a+ r. h9 \  J
git submodule add --force 仓库地址 路径

& D% g# a; |! Z8 b- z+ ]
其中,仓库地址是指子模块仓库地址,路径指将子模块放置在当前工程下的路径。
注意:路径不能以 / 结尾(会造成修改不生效)、不能是现有工程已有的目录(不能順利 Clone)
9 M4 s  O7 A* n' c" z
git submodule init初始化submodule
git submodule update更新submodule(必须在根目录执行命令)
1 p3 L7 N, d; j9 k5 J
当使用git clone下来的工程中带有submodule时,初始的时候,submodule的内容并不会自动下载下来的,此时,只需执行如下命令:

( E5 e7 H3 R1 G+ Q+ B
git submodule update --init --recursive下载的工程带有submodule
git submodule foreach git pullsubmodule 里有其他的 submodule 一次更新
git submodule foreach git pull origin mastersubmodule更新
git submodule foreach --recursive git submodule init
git submodule foreach --recursive git submodule update

- I1 Q  z1 y- \# l. t

8 F* M6 L' D+ S6 x/ x7 L) G/ m2 }% \
本地
+ z/ u0 ~# s2 q9 r
add
3 I( a8 p$ v* e
git add *#跟踪新文件
git add -u [path]#添加[指定路径下]已跟踪文件

0 a" i! P4 ~5 d( }% r, G
rm

/ Y4 R! @/ h1 v
rm &git rm #移除文件
git rm -f *#移除文件
git rm --cached *#取消跟踪
git mv file_from file_to#重命名跟踪文件
git log#查看提交记录
& W0 n0 |! o$ z0 w
commit
1 Z1 `+ ]2 G* Q* P- b+ T0 D
git commit#提交更新
git commit -m 'message'#提交说明
git commit -a#跳过使用暂存区域,把所有已经跟踪过的文件暂存起来一并提交
git commit --amend#修改最后一次提交
git commit log#查看所有提交,包括没有push的commit
git commit -m "#133"#关联issue 任意位置带上#符号加上issue号码
git commit -m "fix #133"commit关闭issue
git commit -m '概要描述'$'\n\n''1.详细描述'$'\n''2.详细描述'#提交简要描述和详细描述

4 n! \: M) r3 y- a2 i  V
reset

: \* C1 K3 H% R1 a
git reset HEAD*#取消已经暂存的文件
git reset --mixed HEAD*#同上
git reset --soft HEAD*#重置到指定状态,不会修改索引区和工作树
git reset --hard HEAD*#重置到指定状态,会修改索引区和工作树
git reset -- files*#重置index区文件

' t( _. f8 F- n& e, @
revert

4 E% j& T0 I' p
git revert HEAD#撤销前一次操作
git revert HEAD~#撤销前前一次操作
git revert commit##撤销指定操作
& n2 I) c: \3 X. d8 A! k
checkout
! e- E; G+ Z" c% j& Y2 O/ Y
git checkout -- file#取消对文件的修改(从暂存区------覆盖worktree file)
git checkout branch|tag|commit -- file_name#从仓库取出file覆盖当前分支
git checkout HEAD~1 [文件]#将会更新 working directory 去匹配某次 commit
git checkout -- .#从暂存区取出文件覆盖工作区
git checkout -b gh-pages 0c304c9这个表示 从当前分支 commit 哈希值为 0c304c9 的节点,分一个新的分支gh-pages出来,并切换到 gh-pages
' a( A, X2 R* Y* `; }! f
diff

1 A* {' \) Y$ z1 q. K$ ]
git diff file#查看指定文件的差异
git diff --stat#查看简单的diff结果
git diff#比较Worktree和Index之间的差异
git diff --cached#比较Index和HEAD之间的差异
git diff HEAD#比较Worktree和HEAD之间的差异
git diff branch#比较Worktree和branch之间的差异
git diff branch1 branch2#比较两次分支之间的差异
git diff commit commit#比较两次提交之间的差异
$ git diff master..test#上面这条命令只显示两个分支间的差异
git diff master...test#你想找出'master','test'的共有 父分支和'test'分支之间的差异,你用3个'.'来取代前面的两个'.'

; l& O' g% r: m& V/ `
stash
, N* r' m" h+ S4 c. M- I" Z
git stash#将工作区现场(已跟踪文件)储藏起来,等以后恢复后继续工作。
git stash list#查看保存的工作现场
git stash apply#恢复工作现场
git stash drop#删除stash内容
git stash pop#恢复的同时直接删除stash内容
git stash apply stash@{0}#恢复指定的工作现场,当你保存了不只一份工作现场时。
/ Y. O/ r: ~3 |- J1 B
merge
0 e7 F- [/ ^+ K+ F
git merge --squash test##合并压缩,将test上的commit压缩为一条
cherry-pick
git cherry-pick commit#拣选合并,将commit合并到当前分支
git cherry-pick -n commit#拣选多个提交,合并完后可以继续拣选下一个提交
2 W# T0 J* y* |5 g
rebase

. \) C( a- e# N8 [; H4 O8 X( A
git rebase master#将master分之上超前的提交,变基到当前分支
git rebase --onto master 169a6#限制回滚范围,rebase当前分支从169a6以后的提交
git rebase --interactive#交互模式,修改commit
git rebase --continue#处理完冲突继续合并
git rebase --skip#跳过
git rebase --abort#取消合并
( A1 i7 l& G6 N7 w: B+ \3 z

; ^! |6 ^, V) P. ?7 a3 R/ u0 A. @
分支branch
5 u5 g) N0 ~/ K  H* u
删除
. f9 d6 P7 \. k5 W
git push origin :branchName#删除远程分支
git push origin --delete new#删除远程分支new
git branch -d branchName#删除本地分支,强制删除用-D
git branch -d test#删除本地test分支
git branch -D test#强制删除本地test分支

; b! s& `$ i8 i8 S- R5 U
提交
% x+ L9 d$ {3 ?
git push -u origin branchName#提交分支到远程origin主机中
& e/ @6 N  p  p- E5 x' e1 O" K' U, \; C
拉取

. M0 M. U* k2 T# s! }# a
git fetch -p#拉取远程分支时,自动清理 远程分支已删除,本地还存在的对应同名分支。

6 Y4 k( M! m$ w% P
分支合并

. `' ^9 X3 H% r* u) \
git merge branchName#合并分支 - 将分支branchName和当前所在分支合并
git merge origin/master#在本地分支上合并远程分支。
git rebase origin/master#在本地分支上合并远程分支。
git merge test#将test分支合并到当前分支

$ }1 A6 e  e( d6 }; V6 _
重命名

* A4 j! |/ u4 S; N$ m- Z) E: T
git branch -m old new#重命名分支

3 h9 A* S2 j7 `5 b: b1 Y
查看

" H5 K4 ~# o( h) S: A3 M8 E5 l5 g
git branch#列出本地分支
git branch -r#列出远端分支
git branch -a#列出所有分支
git branch -v#查看各个分支最后一个提交对象的信息
git branch --merge#查看已经合并到当前分支的分支
git branch --no-merge#查看为合并到当前分支的分支
, X, i  v# m9 L( U, C
新建

3 U; o. j& P! }2 M
git branch test#新建test分支
git checkout -b newBrach origin/master#取回远程主机的更新以后,在它的基础上创建一个新的分支
7 t2 N. o( ]' [; d$ F# Q' b. J/ g3 H
连接

# u4 O1 v+ I9 f5 y) K2 i7 F
git branch --set-upstream dev origin/dev#将本地dev分支与远程dev分支之间建立链接
git branch --set-upstream master origin/next#手动建立追踪关系
8 L. n: S+ o; \- A
分支切换

- z3 q, f" Q( u6 H+ g: F
git checkout test#切换到test分支
git checkout -b test#新建+切换到test分支
git checkout -b test dev#基于dev新建test分支,并切换

3 F' ^0 t5 t' A7 j2 V5 x8 j
远端

+ l* V3 z8 y5 E' m  G  N
git fetch <远程主机名> <分支名>#fetch取回所有分支(branch)的更新
git fetch origin remotebranch[:localbranch]# 从远端拉去分支[到本地指定分支]
git merge origin/branch#合并远端上指定分支
git pull origin remotebranch:localbranch# 拉去远端分支到本地分支
git push origin branch#将当前分支,推送到远端上指定分支
git push origin localbranch:remotebranch#推送本地指定分支,到远端上指定分支
git push origin :remotebranch#删除远端指定分支
git checkout -b [--track] test origin/dev基于远端dev分支,新建本地test分支[同时设置跟踪]

0 {+ _8 ~0 _; t' Z5 m7 ~

3 R- b) v- l, i$ Y# A
撤销远程记录
' C: W8 n: {4 k2 n1 Y+ n
git reset --hard HEAD~1#撤销一条记录
git push -f origin HEAD:master#同步到远程仓库
2 B5 u  @9 m% B
忽略文件
' H; z. F' g. d
echo node_modules/ >> .gitignore
4 l( y# l& P; z" q6 `
删除文件

. }; t- f. E: D/ \- E
git rm -rf node_modules/
$ ^$ i/ b$ f4 Y+ T! K
源remote
9 e  s# C  l' [6 M+ D
git是一个分布式代码管理工具,所以可以支持多个仓库,在git里,服务器上的仓库在本地称之为remote。
3 M' w' \3 q7 @4 K& H  y- M1 d* m5 L+ I
个人开发时,多源用的可能不多,但多源其实非常有用。
# f0 B) D: Q0 B7 y  R8 w/ v2 C
git remote add origin1 git@github.com:yanhaijing/data.js.git
git remote#显示全部源
git remote -v#显示全部源+详细信息
git remote rename origin1 origin2#重命名
git remote rm origin#删除
git remote show origin#查看指定源的全部信息

3 E3 e; e8 e6 W) S
原创:来自GIT小助手
2 ]( y- o  F' t

本版积分规则

团购课程最新动态

 

 

高品质!好口碑!

百分百通过率!

PeopleCertEXIN

国际授权资质!

ITIL Foundation北上广

2天精华班,包证书

ITIL Foundation三天精

讲,知名讲师,包证书

ITIL Expert 金牌讲师北

上广深11天,包证书

DevOps Foundation

2天热点认证班,包证书

ITSS 认证IT服务经理

4天课程,包证书

Prince2双证4天高级班

Cobit高端课程2天班

Togaf高端课程4天班

 

报名热线: 4008-060-230


QQ|小黑屋|手机版|Archiver|ITIL先锋论坛万人社区 ( 粤ICP备17056641号|网站地图

Baidu

GMT+8, 2018-4-25 02:19 , Processed in 0.219766 second(s), 34 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表