请选择 进入手机版 | 继续访问电脑版

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

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

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 340|回复: 0

Git指令大百科

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

参加活动:0

组织活动:12

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

% Q7 W5 L: V* o) [! g5 {
首先是配置帐号信息

, t9 f/ U! f$ H; |" R# Y; ^
ssh -T git@github.com#登陆github

: L+ X5 F$ y6 r
修改项目中的个人信息

# m& J, W: F2 ~) G! S$ A/ j
git config --global user.name "githelper"
git config --global user.email githelper@gmail.com
7 r  L  u2 q3 \% E% k4 ~
config

9 Y  ?1 c- [: j4 ]2 W0 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#添加远程路径
  W2 f$ I  q8 b( x" B& H
help
! S& ]2 Z1 N5 V
git help config#获取帮助信息

1 ]- j' I1 I- P/ x9 Y$ v% ?0 B2 v
配置自动换行(自动转换坑太大)
& t1 i) Q' k. c- z
git config --global core.autocrlf input#提交到git是自动将换行符转换为lf

2 S: ]: h" a. y8 m( v
配置密钥
; |( w: K, x' e' ]
ssh-keygen -t rsa -C JSLite@yeah.net#生成密钥
ssh -T git@github.com#测试是否成功
4 k& _5 }7 M: Q( Z8 I3 `
多账号ssh配置
7 X+ l5 G6 q" O# Q, M
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

0 a4 R! q  s* g, y, x# i: S* E

' ~- m9 Q9 }3 ]$ t4 r% y; T7 A
push
2 O) Z+ [) z7 d
git push origin master
git push -f origin master#强制推送
+ ]/ D/ v$ x) X
缩写 -f
全写--force
注:强制推送文件没有了哦
7 H/ Q8 P" J; s$ D  O; |" X
pull

( Y0 ^0 ^0 S. ~
只能拉取origin里的一个url地址,这个fetch-url
默认为你添加的到origin的第一个地址
% b, E$ Z0 h+ E7 w
git pull origin master
git pull --all#获取远程所有内容包括tag
git pull origin next:master#取回origin主机的next分支,与本地的master分支合并
git pull origin next#远程分支是与当前分支合并
& f8 j; ~% T* N7 S+ ^" r" v
上面一条命令等同于下面两条命令

( K7 M+ Y# L% m
git fetch origin
git merge origin/next

5 O5 y) [' {* x5 G
如果远程主机删除了某个分支,默认情况下,git pull 不会在拉取远程分支的时候,删除对应的本地分支。这是为了防止,由于其他人操作了远程主机,导致git pull不知不觉删除了本地分支。
. P# p4 \) f2 B' A* H
但是,你可以改变这个行为,加上参数 -p 就会在本地删除远程已经删除的分支。
4 G# k( ~* ~' C8 x
$ git pull -p

2 v4 q# C. |2 I2 k+ K! m) l/ v. V
等同于下面的命令

: y3 W1 S8 k6 K
$ git fetch --prune origin
$ git fetch -p
6 k1 i& q9 P  b2 Y7 _
+ b6 y4 d9 p4 P  q+ D
新建仓库init

, e5 T8 P& n$ B- q8 ~& X
git init#初始化
8 c4 k0 ?9 y' z6 W; K. _5 b
status
( p: V  w$ {' W. e9 C, i
git status#获取状态

2 E1 C4 c  \5 @" d. b/ C8 x* `
add

, |6 T: P$ b4 E3 I, p" v
git add file#.或*代表全部添加
git rm --cached 在commit之前撤销git add操作
git reset head好像比上面git rm --cached更方便
4 D1 |3 [: L& g' I2 {- o
commit
4 _& P; @# Y! O+ I5 k1 d
git commit -m "message"#此处注意乱码
. D- H3 O5 X$ c6 T8 ?
remote
! H- P% n4 {( [% l* ^/ {  [
git remote add origin git@github.com:JSLite/test.git#添加源

0 ^( S5 W8 X! l' U' B5 ^
push

8 W6 H$ {! R9 C: B
git push -u origin master#push同事设置默认跟踪分支
git push origin master
2 M# V: g- Y5 S6 G' R0 }. t) d5 |
从现有仓库克隆
: W& E4 J4 H/ l$ b( _, \
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 c/ t6 \4 W0 x) Z
git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,下面是一些例子。$ git clone <版本库的网址> <本地目录名>
5 h& P1 H1 v8 _1 ~3 d( e2 n1 `( w. {
$ 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/

2 G  }& P7 _5 T+ A. X  a
submodule
5 `7 e% H# }7 y% f
git submodule add --force 仓库地址 路径
: v3 s( ?. [2 o# |6 l" [
其中,仓库地址是指子模块仓库地址,路径指将子模块放置在当前工程下的路径。
注意:路径不能以 / 结尾(会造成修改不生效)、不能是现有工程已有的目录(不能順利 Clone)
! ?. U: W  S% J' _" W: ]' A. ]( b) [
git submodule init初始化submodule
git submodule update更新submodule(必须在根目录执行命令)
/ F2 P7 A# p/ u  ~4 j, \
当使用git clone下来的工程中带有submodule时,初始的时候,submodule的内容并不会自动下载下来的,此时,只需执行如下命令:
7 F" \; m# t. v
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

8 |( {4 C+ Q4 y
3 o- h! J1 k; `: P8 h1 C7 c
本地
; e7 ?; ]  Z* S" s
add

) |( ^) M$ _5 H  C
git add *#跟踪新文件
git add -u [path]#添加[指定路径下]已跟踪文件

0 e: F& @  X+ e& ~8 u
rm

* f% k+ [* O6 s, F+ N& P
rm &git rm #移除文件
git rm -f *#移除文件
git rm --cached *#取消跟踪
git mv file_from file_to#重命名跟踪文件
git log#查看提交记录
: ?& R$ S) q& ], \, k
commit
6 V8 Y! M6 g% Q
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.详细描述'#提交简要描述和详细描述

. D+ `+ S- e* x  M7 Z; w8 x
reset

- F2 l! T9 u5 t
git reset HEAD*#取消已经暂存的文件
git reset --mixed HEAD*#同上
git reset --soft HEAD*#重置到指定状态,不会修改索引区和工作树
git reset --hard HEAD*#重置到指定状态,会修改索引区和工作树
git reset -- files*#重置index区文件
' J. {, O$ a6 F
revert
% K# T1 `. o# t' w4 k
git revert HEAD#撤销前一次操作
git revert HEAD~#撤销前前一次操作
git revert commit##撤销指定操作

7 a7 Y/ g3 W- a1 a4 O7 v' H" }; C3 I# b# f
checkout

6 M- T( _/ S0 k1 r
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

: }& W5 g" o4 Y4 v. p
diff

/ h. u- y3 a  I
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个'.'来取代前面的两个'.'
5 G$ d# @% G9 \
stash

6 l3 C" l" o( N. N6 {4 D1 F6 t( |
git stash#将工作区现场(已跟踪文件)储藏起来,等以后恢复后继续工作。
git stash list#查看保存的工作现场
git stash apply#恢复工作现场
git stash drop#删除stash内容
git stash pop#恢复的同时直接删除stash内容
git stash apply stash@{0}#恢复指定的工作现场,当你保存了不只一份工作现场时。

! V: `  L$ }! }- X
merge
8 K6 a) z, A9 z; K( |
git merge --squash test##合并压缩,将test上的commit压缩为一条
cherry-pick
git cherry-pick commit#拣选合并,将commit合并到当前分支
git cherry-pick -n commit#拣选多个提交,合并完后可以继续拣选下一个提交

, A$ B- H$ f* T1 H/ ]8 C
rebase

9 w% m1 w7 z5 j* i& g! x! B" B4 r
git rebase master#将master分之上超前的提交,变基到当前分支
git rebase --onto master 169a6#限制回滚范围,rebase当前分支从169a6以后的提交
git rebase --interactive#交互模式,修改commit
git rebase --continue#处理完冲突继续合并
git rebase --skip#跳过
git rebase --abort#取消合并
3 Y; Y9 V# ?/ f: C7 \$ m' F

  L: o" r) m5 X8 G
分支branch
$ ]5 w: r; |8 Q, |" L  C5 d
删除

/ D6 P8 v. {) q! ^4 r% ?* x: j$ ~
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分支
- E' m+ Y4 s$ c3 S/ U! e# T) r
提交

7 z4 e. y' f% v3 u$ J0 u  ]- E
git push -u origin branchName#提交分支到远程origin主机中
% ~, I! e1 h  `4 x
拉取
0 T, a8 m3 i- B$ G' G8 Y
git fetch -p#拉取远程分支时,自动清理 远程分支已删除,本地还存在的对应同名分支。

1 _- i( `4 |% m4 G
分支合并
' y& {+ |$ P8 H) _9 Z* s
git merge branchName#合并分支 - 将分支branchName和当前所在分支合并
git merge origin/master#在本地分支上合并远程分支。
git rebase origin/master#在本地分支上合并远程分支。
git merge test#将test分支合并到当前分支

, z1 g' L+ J- G8 |, e: o
重命名
& E& T) P! q6 d1 z. @/ l, ]
git branch -m old new#重命名分支

# \! J( F$ U  A$ H; w5 g
查看
: q& M6 o$ W6 J  ?
git branch#列出本地分支
git branch -r#列出远端分支
git branch -a#列出所有分支
git branch -v#查看各个分支最后一个提交对象的信息
git branch --merge#查看已经合并到当前分支的分支
git branch --no-merge#查看为合并到当前分支的分支

; V- k0 E& }8 B& @
新建

, a! f- N+ E2 ]6 q! j
git branch test#新建test分支
git checkout -b newBrach origin/master#取回远程主机的更新以后,在它的基础上创建一个新的分支
- }6 j1 d& @  x' q+ X; S* K
连接

- S& M$ Z) K# Q6 ?4 G
git branch --set-upstream dev origin/dev#将本地dev分支与远程dev分支之间建立链接
git branch --set-upstream master origin/next#手动建立追踪关系

$ ]8 r$ s( L5 r9 z
分支切换

. X: B7 ]( e: T
git checkout test#切换到test分支
git checkout -b test#新建+切换到test分支
git checkout -b test dev#基于dev新建test分支,并切换
7 }; x2 h9 c: n, f! c
远端
& {, P5 T+ K5 c/ X) P* v
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分支[同时设置跟踪]

9 Y; P: ?5 B2 W" J7 L

8 n0 J! R/ R/ c4 }
撤销远程记录

5 L( u& h. Q1 ~2 i/ E: i! _
git reset --hard HEAD~1#撤销一条记录
git push -f origin HEAD:master#同步到远程仓库
" @1 P' F6 q3 z$ l5 N
忽略文件
2 ?' V+ M6 B6 @. j5 r8 s5 l
echo node_modules/ >> .gitignore
: u, }0 W) e# {: s$ I3 _( Z+ f4 i
删除文件

! A5 F* }8 O3 p; w0 t
git rm -rf node_modules/

) c3 J* Y% P4 t& L
源remote

. e# [& B  c& z5 A0 f
git是一个分布式代码管理工具,所以可以支持多个仓库,在git里,服务器上的仓库在本地称之为remote。
( t2 j: n$ a( e7 f
个人开发时,多源用的可能不多,但多源其实非常有用。

% v9 i, k- S9 n" S
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#查看指定源的全部信息
- q* W9 H) v( h: Z3 v
原创:来自GIT小助手
. V; n3 X- E+ k3 c) b! `1 e  ~' K* @

本版积分规则

选择云运维时代的王牌讲师-长河老师,助你轻松入门ITIL Foundation培训课程

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

Baidu

GMT+8, 2018-6-20 06:23 , Processed in 0.231419 second(s), 34 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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