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

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

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 107|回复: 0

Git指令大百科

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

参加活动:0

组织活动:12

发表于 2017-8-24 14:52:53 | 显示全部楼层 |阅读模式 来自- 广东广州
配置

% S+ F" E; h% r
首先是配置帐号信息

* ^, f$ Y; S1 ~/ I6 a, d" v* T
ssh -T git@github.com#登陆github

" x4 c+ l9 E2 v# F
修改项目中的个人信息
, j9 y/ i) n9 v) ?! U8 R! E( l
git config --global user.name "githelper"
git config --global user.email githelper@gmail.com

' ]2 g! C" e, S7 g# f, n* r
config
7 i+ _; [/ R# c" ]0 f
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#添加远程路径
3 [3 x/ ~; l% d2 t9 n/ t/ X
help

: A3 w- Q" B3 Q, V3 w$ d; C
git help config#获取帮助信息

3 ?8 ~- P. \+ l' r. [% H4 c
配置自动换行(自动转换坑太大)

( h, k* @! e1 ?
git config --global core.autocrlf input#提交到git是自动将换行符转换为lf
: W4 p5 R! B) B
配置密钥
+ r) H6 _5 \' W; L# l& Z. s
ssh-keygen -t rsa -C JSLite@yeah.net#生成密钥
ssh -T git@github.com#测试是否成功

6 ]" {' q! L) p
多账号ssh配置
* E( y. s5 f" z+ j3 v. T! W$ F2 {
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
, k1 J& o+ e4 `' I' p, O7 g
1 e# |" d) [1 ?6 [0 D& y
push

3 i# N7 h: z4 _# `4 O" }, O
git push origin master
git push -f origin master#强制推送

$ T# x' G4 \; d0 \4 @2 c
缩写 -f
全写--force
注:强制推送文件没有了哦
& l' M9 G0 [2 ]
pull

# h4 R  K3 U; k6 q. H+ T& _
只能拉取origin里的一个url地址,这个fetch-url
默认为你添加的到origin的第一个地址
( R# F! E' K- C" U
git pull origin master
git pull --all#获取远程所有内容包括tag
git pull origin next:master#取回origin主机的next分支,与本地的master分支合并
git pull origin next#远程分支是与当前分支合并
4 u) B; E$ M' `) n/ P( F
上面一条命令等同于下面两条命令

! R5 i6 w3 d- v6 P1 m& r
git fetch origin
git merge origin/next
3 F: B$ X3 ]/ K3 ^# S/ Z
如果远程主机删除了某个分支,默认情况下,git pull 不会在拉取远程分支的时候,删除对应的本地分支。这是为了防止,由于其他人操作了远程主机,导致git pull不知不觉删除了本地分支。

$ g9 ^5 n( V+ h1 w5 W
但是,你可以改变这个行为,加上参数 -p 就会在本地删除远程已经删除的分支。

5 {4 w# _$ d" F" V# b5 g7 I
$ git pull -p

  k& Q% q5 O5 l0 V6 a
等同于下面的命令
  y, o" G6 ~0 `' Y' S. m5 O
$ git fetch --prune origin
$ git fetch -p
8 u& F* X9 A! }4 t9 L/ A) {

6 r2 J. p3 a8 A( q
新建仓库init
3 \( B+ Z* a8 d+ ?/ b3 S
git init#初始化
9 `9 o/ ^/ z1 b- `5 q, E% }
status
0 s& X9 _# w, K
git status#获取状态
6 {8 M8 A( w1 E  [' [) t, D6 J3 {
add

  u& h* t$ f& t* d
git add file#.或*代表全部添加
git rm --cached 在commit之前撤销git add操作
git reset head好像比上面git rm --cached更方便
) R6 |) X. A# {$ ~, T
commit
/ U$ f& k$ ~9 P5 t. k$ w
git commit -m "message"#此处注意乱码
9 I$ }2 ^# u6 H# k
remote
) \  n  W9 A; |
git remote add origin git@github.com:JSLite/test.git#添加源

% @6 Z- g5 Q( y: S$ p4 A& T1 A
push
: O, }* n  E. m% u/ i" g
git push -u origin master#push同事设置默认跟踪分支
git push origin master
  Q( W  k0 X; V. s
从现有仓库克隆
2 B; _) X4 y+ d; Z0 d
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协议还有另一种写法。

2 j3 i* ?, m( s8 b) \! U
git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,下面是一些例子。$ git clone <版本库的网址> <本地目录名>

4 p0 ~8 k* B2 G( t
$ 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/

3 M1 @7 ]# q2 ?
submodule

3 s+ s# B. t" A3 c3 v6 X
git submodule add --force 仓库地址 路径
- o; S. \1 @: w) A# u
其中,仓库地址是指子模块仓库地址,路径指将子模块放置在当前工程下的路径。
注意:路径不能以 / 结尾(会造成修改不生效)、不能是现有工程已有的目录(不能順利 Clone)
6 R" a- w; \/ l+ b/ H
git submodule init初始化submodule
git submodule update更新submodule(必须在根目录执行命令)

, _- Z  O1 q$ f6 I, h
当使用git clone下来的工程中带有submodule时,初始的时候,submodule的内容并不会自动下载下来的,此时,只需执行如下命令:
' H$ t1 `. w% {
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
$ n6 B) ~" l! f
; e" J/ |) x, d- ^  a1 Z/ R
本地
5 I5 y9 T6 R# p: j- a; W
add

. @3 w! P9 z3 t# j4 h7 L
git add *#跟踪新文件
git add -u [path]#添加[指定路径下]已跟踪文件

& m# i3 n& H* u4 r
rm
+ ]0 x- k$ w$ D  G  N3 g6 i
rm &git rm #移除文件
git rm -f *#移除文件
git rm --cached *#取消跟踪
git mv file_from file_to#重命名跟踪文件
git log#查看提交记录

7 \3 A, E2 f: t* j
commit
$ b/ L( i! ~6 U: ^
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.详细描述'#提交简要描述和详细描述

6 w) v1 r- `9 s" C
reset

, A2 m. N7 _7 I. A' A
git reset HEAD*#取消已经暂存的文件
git reset --mixed HEAD*#同上
git reset --soft HEAD*#重置到指定状态,不会修改索引区和工作树
git reset --hard HEAD*#重置到指定状态,会修改索引区和工作树
git reset -- files*#重置index区文件

3 }% S5 t2 ^: Z, m) ^# K
revert

2 M  b: U3 T7 L4 N7 n  P
git revert HEAD#撤销前一次操作
git revert HEAD~#撤销前前一次操作
git revert commit##撤销指定操作
8 y8 q5 [% k$ j6 n' Y' n4 u& p
checkout
/ P; y' O5 m  Z9 Z. p8 j% E
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

, T$ D, B0 q8 I9 W
diff

" `" P/ v0 Z( p* h; O
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个'.'来取代前面的两个'.'
0 j; m& |# _7 a' L6 \
stash
2 o3 E0 D9 _- N( m5 J$ O: u& d
git stash#将工作区现场(已跟踪文件)储藏起来,等以后恢复后继续工作。
git stash list#查看保存的工作现场
git stash apply#恢复工作现场
git stash drop#删除stash内容
git stash pop#恢复的同时直接删除stash内容
git stash apply stash@{0}#恢复指定的工作现场,当你保存了不只一份工作现场时。

( B0 |0 P& u1 F7 ]- a  A( S/ j
merge

9 t& F1 d! R* n! M/ v- y
git merge --squash test##合并压缩,将test上的commit压缩为一条
cherry-pick
git cherry-pick commit#拣选合并,将commit合并到当前分支
git cherry-pick -n commit#拣选多个提交,合并完后可以继续拣选下一个提交
: L0 ^3 ]6 i! g3 S$ v0 N5 J
rebase

" m0 {! m+ K, s6 n/ Y
git rebase master#将master分之上超前的提交,变基到当前分支
git rebase --onto master 169a6#限制回滚范围,rebase当前分支从169a6以后的提交
git rebase --interactive#交互模式,修改commit
git rebase --continue#处理完冲突继续合并
git rebase --skip#跳过
git rebase --abort#取消合并

; U/ K( F- ^$ @5 V3 Z
/ P" i* R  M) i' h3 A
分支branch# O& T! b' o( _) W/ b
删除

. A" m( R- `9 s9 a3 y  `
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分支
" J8 n" G0 L% T* c+ Y1 H
提交

6 j, q' B/ p2 O3 J4 P9 j
git push -u origin branchName#提交分支到远程origin主机中

' d* C" t; t* A1 T3 G& i
拉取

' m# P% `4 `. p
git fetch -p#拉取远程分支时,自动清理 远程分支已删除,本地还存在的对应同名分支。
& Y3 K) W2 V/ S/ e. Y  a  D: J5 u
分支合并
9 V% `' ~* j; Y; I2 @
git merge branchName#合并分支 - 将分支branchName和当前所在分支合并
git merge origin/master#在本地分支上合并远程分支。
git rebase origin/master#在本地分支上合并远程分支。
git merge test#将test分支合并到当前分支

: p, E; Z: ?% |2 ~1 r, @" I
重命名

% m) p) D( c1 q2 [1 A
git branch -m old new#重命名分支
0 F7 k! d- ]& Z- ^* Y# P. y6 y4 y
查看
& `. Y: n1 X& f# F6 P7 w  w. n+ v  l( V; j
git branch#列出本地分支
git branch -r#列出远端分支
git branch -a#列出所有分支
git branch -v#查看各个分支最后一个提交对象的信息
git branch --merge#查看已经合并到当前分支的分支
git branch --no-merge#查看为合并到当前分支的分支

) m7 \' V; v# `, c2 r. }
新建
8 j& ^4 j; j4 V) y$ I' m0 u% f
git branch test#新建test分支
git checkout -b newBrach origin/master#取回远程主机的更新以后,在它的基础上创建一个新的分支

, Y- _1 C3 ]7 m( c8 ~
连接

; k$ G4 b4 L/ z4 I
git branch --set-upstream dev origin/dev#将本地dev分支与远程dev分支之间建立链接
git branch --set-upstream master origin/next#手动建立追踪关系

2 @( Z! L7 r8 B  r9 Y! O
分支切换
5 g5 |8 v6 y$ X0 W7 K- \7 m& A
git checkout test#切换到test分支
git checkout -b test#新建+切换到test分支
git checkout -b test dev#基于dev新建test分支,并切换

  ?9 G/ E) R) z! _; U1 m- p
远端

/ a2 [& K- [/ l% K5 h2 q! o
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分支[同时设置跟踪]
$ L$ X' H" U+ d4 u+ W/ V0 p% `8 k

4 g1 X# o9 p  {' m$ q& V
撤销远程记录

/ r! R  }$ [) }5 E/ c6 P2 @! {* B: \$ }
git reset --hard HEAD~1#撤销一条记录
git push -f origin HEAD:master#同步到远程仓库
  |4 R4 z+ h* H' i" x& r9 m% \7 T$ O
忽略文件

9 `6 J" @; Z8 b$ U6 D0 F! T
echo node_modules/ >> .gitignore

5 j+ k( O8 t% y( J% Q
删除文件

; ^- e: x. S" q2 l
git rm -rf node_modules/

6 z: q4 @; X2 [( Q; P. e
源remote

$ s5 \( ]7 ?5 ^$ @" I! n2 H
git是一个分布式代码管理工具,所以可以支持多个仓库,在git里,服务器上的仓库在本地称之为remote。

" j3 r; P5 w. m7 U# h
个人开发时,多源用的可能不多,但多源其实非常有用。
( Z$ e  q  L7 b3 W, s2 i
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#查看指定源的全部信息

0 o1 L3 Z  I) i' s% [0 x, U
原创:来自GIT小助手
1 f( m7 K) v1 p

本版积分规则

团购课程最新动态

 

 

高品质!好口碑!

百分百通过率!

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-2-22 19:01 , Processed in 0.235842 second(s), 34 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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