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

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

 找回密码
 微信、QQ、手机号一键注册

扫描二维码登录本站

QQ登录

只需一步,快速开始

艾拓先锋
搜索
查看: 564|回复: 0

Git指令大百科

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

参加活动:0

组织活动:12

发表于 2017-8-24 14:52:53 | 显示全部楼层 |阅读模式 来自- 广东广州
配置
- H/ B& G, R: m6 }
首先是配置帐号信息

$ d& @. X( Q, ]4 c5 V
ssh -T git@github.com#登陆github

/ N6 h: n2 U9 N; R( ]9 g7 R
修改项目中的个人信息

! |4 `" p3 o3 g' w# L! W
git config --global user.name "githelper"
git config --global user.email githelper@gmail.com

6 m3 x' Y8 Y5 @/ @$ x
config

/ Q5 Z1 O9 C/ y
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#添加远程路径

) c; \: O3 `7 `0 G
help
) d$ }, N( |4 S
git help config#获取帮助信息

. ~$ a  g/ S9 [1 R* r- n
配置自动换行(自动转换坑太大)
1 G, [/ M4 \% X" S/ S
git config --global core.autocrlf input#提交到git是自动将换行符转换为lf

1 N: y3 B6 `4 M7 [! ~
配置密钥

& c' @. j, u2 t1 c* r
ssh-keygen -t rsa -C JSLite@yeah.net#生成密钥
ssh -T git@github.com#测试是否成功
1 Q! {  p! B, y1 ?! e
多账号ssh配置

- b) S# [9 t) ~2 ?
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
& x4 w5 f2 o1 H, w" j

; v& C& d3 {7 ~
push

3 j0 [  D9 V  X: `5 |9 ]( ?
git push origin master
git push -f origin master#强制推送
- o7 B# w3 o: L0 m& g0 P
缩写 -f
全写--force
注:强制推送文件没有了哦

# {& i! @/ `$ }3 _
pull
9 W: K+ c, D3 S/ C, o) U
只能拉取origin里的一个url地址,这个fetch-url
默认为你添加的到origin的第一个地址
: Y) I0 e2 K/ \* D# i# t/ J1 Z
git pull origin master
git pull --all#获取远程所有内容包括tag
git pull origin next:master#取回origin主机的next分支,与本地的master分支合并
git pull origin next#远程分支是与当前分支合并
6 Q) R8 z2 w8 t
上面一条命令等同于下面两条命令

6 w  t, g4 l$ l: L1 m3 ?
git fetch origin
git merge origin/next

# C9 e- I6 j+ K1 |7 F* d- d
如果远程主机删除了某个分支,默认情况下,git pull 不会在拉取远程分支的时候,删除对应的本地分支。这是为了防止,由于其他人操作了远程主机,导致git pull不知不觉删除了本地分支。

* l: J  K( F( v- A9 y! S0 |
但是,你可以改变这个行为,加上参数 -p 就会在本地删除远程已经删除的分支。
$ R4 V9 ]# v8 n
$ git pull -p

! ?' ]- |; |; A6 [* }$ i
等同于下面的命令

+ d2 u, g# b3 @4 }8 n4 p2 r
$ git fetch --prune origin
$ git fetch -p

5 L4 C2 {+ d( K

9 D: y. V- J+ }. y& r6 d7 d/ q
新建仓库init
& A# X  z' Z) e; N5 }* ]4 g. {
git init#初始化

# p$ f7 R9 F3 L: N. A: t7 R8 v
status
" c* Z! N, t$ T) s3 b. V
git status#获取状态

2 Y0 b( u& X* ~3 Y
add

; U2 R$ A/ ^# U" q8 N
git add file#.或*代表全部添加
git rm --cached 在commit之前撤销git add操作
git reset head好像比上面git rm --cached更方便
) t) Y. G9 V1 U% x
commit
3 X, d! a( e' r1 e2 w
git commit -m "message"#此处注意乱码

1 e  X4 ^0 o8 W# K$ h: ~: B" i
remote

* A* [+ w  r" s+ M+ e3 }% G
git remote add origin git@github.com:JSLite/test.git#添加源
! `6 `6 Q) T: O# E4 V/ U" \
push
. {- N' o  {/ y" w6 _! N/ a4 q  B' S
git push -u origin master#push同事设置默认跟踪分支
git push origin master
$ l  d, e6 A) H7 F
从现有仓库克隆
6 `( U0 }: r. G0 [; |* j, 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协议还有另一种写法。

- \' Y" ]% _0 q# f7 t, b# A, w( K% o
git clone支持多种协议,除了HTTP(s)以外,还支持SSH、Git、本地文件协议等,下面是一些例子。$ git clone <版本库的网址> <本地目录名>
$ B3 a  [+ g- C
$ 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/
% c5 W9 m: ^, p1 n% I& h  Z1 _
submodule
- [! k8 ?4 L8 N* B, _: i; F' g+ k
git submodule add --force 仓库地址 路径
1 V! R4 V3 W9 B% p9 M. a: @
其中,仓库地址是指子模块仓库地址,路径指将子模块放置在当前工程下的路径。
注意:路径不能以 / 结尾(会造成修改不生效)、不能是现有工程已有的目录(不能順利 Clone)

- p& {3 y1 R" u
git submodule init初始化submodule
git submodule update更新submodule(必须在根目录执行命令)

* ^$ d6 }' w8 i
当使用git clone下来的工程中带有submodule时,初始的时候,submodule的内容并不会自动下载下来的,此时,只需执行如下命令:
8 C& q2 Z8 ?. ]% ~# ?& @- 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

$ i/ L( T7 B" {5 w+ h

/ j" {, E; `8 b8 F( E) N$ L
本地

" n2 t, E! j* Z) U
add
/ [; j5 v/ ^( g9 S1 z
git add *#跟踪新文件
git add -u [path]#添加[指定路径下]已跟踪文件

) V# P! @6 `7 i4 q5 b0 Z7 P1 |
rm

/ _; |4 {8 {, d! t- Y
rm &git rm #移除文件
git rm -f *#移除文件
git rm --cached *#取消跟踪
git mv file_from file_to#重命名跟踪文件
git log#查看提交记录
( D: O+ M, x; T0 f
commit
6 w) U  q. f  Y, r' M- E
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.详细描述'#提交简要描述和详细描述

' B2 S8 o, l( \: L' y
reset
  n% W3 O. T- m% u
git reset HEAD*#取消已经暂存的文件
git reset --mixed HEAD*#同上
git reset --soft HEAD*#重置到指定状态,不会修改索引区和工作树
git reset --hard HEAD*#重置到指定状态,会修改索引区和工作树
git reset -- files*#重置index区文件
/ g9 }# F( V# r) `
revert

& S/ t7 |; G) u: S" M/ G2 v1 w5 r
git revert HEAD#撤销前一次操作
git revert HEAD~#撤销前前一次操作
git revert commit##撤销指定操作

$ j& H% @) `% h4 E/ _9 u3 _( h9 @1 i
checkout
* `  t. d! Z1 \- N) t
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
( p9 h1 U' {3 p. a" O. Q2 P8 I% K
diff

& w; I; u: M' O9 z& t' a
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个'.'来取代前面的两个'.'
: {# X; E( i5 R4 E; I2 o
stash

) ^3 [; Y, b+ x3 H' o
git stash#将工作区现场(已跟踪文件)储藏起来,等以后恢复后继续工作。
git stash list#查看保存的工作现场
git stash apply#恢复工作现场
git stash drop#删除stash内容
git stash pop#恢复的同时直接删除stash内容
git stash apply stash@{0}#恢复指定的工作现场,当你保存了不只一份工作现场时。

4 V) e" Y$ j0 J% }2 i
merge
2 ~9 |6 _6 m& D6 @
git merge --squash test##合并压缩,将test上的commit压缩为一条
cherry-pick
git cherry-pick commit#拣选合并,将commit合并到当前分支
git cherry-pick -n commit#拣选多个提交,合并完后可以继续拣选下一个提交
9 E0 m& ?5 _: N
rebase

9 T' b9 w- ^3 `
git rebase master#将master分之上超前的提交,变基到当前分支
git rebase --onto master 169a6#限制回滚范围,rebase当前分支从169a6以后的提交
git rebase --interactive#交互模式,修改commit
git rebase --continue#处理完冲突继续合并
git rebase --skip#跳过
git rebase --abort#取消合并
0 J; G# n# y" E& b0 L& I% x+ Q9 x

2 V- O" J5 N( J& `% Q6 I6 d- [
分支branch
) q% ]8 Y8 K! C% Y+ W* K5 R
删除
0 e! Y" u6 `$ Z2 `& _" `- m6 t2 S
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分支

) P6 t, F/ z* }, K" X" i) j
提交
6 a6 G$ M7 A- C3 y  v: G( }
git push -u origin branchName#提交分支到远程origin主机中

' B0 @, a7 F3 \3 h9 h6 _
拉取
0 J1 s5 ?1 P9 T* `
git fetch -p#拉取远程分支时,自动清理 远程分支已删除,本地还存在的对应同名分支。

1 D+ k: {! i) E+ J/ V8 d
分支合并

0 k% s( q- `: m+ u& e- S0 }; n
git merge branchName#合并分支 - 将分支branchName和当前所在分支合并
git merge origin/master#在本地分支上合并远程分支。
git rebase origin/master#在本地分支上合并远程分支。
git merge test#将test分支合并到当前分支

- t) i0 s" p* O# S5 B
重命名
5 b# ^0 K$ S3 f& w# ?) p8 s/ g
git branch -m old new#重命名分支
3 C7 }1 B4 y4 p, ^6 H8 p
查看

' C' k' [; ?7 t% |$ C+ q- Q
git branch#列出本地分支
git branch -r#列出远端分支
git branch -a#列出所有分支
git branch -v#查看各个分支最后一个提交对象的信息
git branch --merge#查看已经合并到当前分支的分支
git branch --no-merge#查看为合并到当前分支的分支

( K5 b9 \4 u8 l: C% }5 J9 z
新建

' H7 b4 l. D4 J) N) ]
git branch test#新建test分支
git checkout -b newBrach origin/master#取回远程主机的更新以后,在它的基础上创建一个新的分支
  H$ A3 @% |1 p7 F. Q) z- M$ a6 J
连接
$ b+ Q% o( r" Z0 ~( \
git branch --set-upstream dev origin/dev#将本地dev分支与远程dev分支之间建立链接
git branch --set-upstream master origin/next#手动建立追踪关系

% r0 J0 a* x2 }# g4 D
分支切换

" n3 y9 x3 e! D, C& I
git checkout test#切换到test分支
git checkout -b test#新建+切换到test分支
git checkout -b test dev#基于dev新建test分支,并切换

  {4 U/ ]/ Z: m6 P1 T2 C! B, s
远端

3 L  [1 a' e! `) m
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分支[同时设置跟踪]

- c. |, f& m% u2 |6 o
; @8 q* X# I- i" X0 ?5 A3 j) X0 w
撤销远程记录
5 Y- y# e; |/ Z8 g) S( d
git reset --hard HEAD~1#撤销一条记录
git push -f origin HEAD:master#同步到远程仓库
. Y* ?+ \0 Q. s- j
忽略文件

* [9 J" Z$ H7 r( I: p3 ]" e* z7 T
echo node_modules/ >> .gitignore

7 w/ I' T* T* Z; l% j  l$ o
删除文件

/ O8 `7 `  B  D8 `. i5 O
git rm -rf node_modules/
8 _- C3 i% ^4 T5 [* X: k% L$ R
源remote
) q) E; S- W3 u6 r7 ]% C
git是一个分布式代码管理工具,所以可以支持多个仓库,在git里,服务器上的仓库在本地称之为remote。
( T( M4 F# L; L) D. K- h& g
个人开发时,多源用的可能不多,但多源其实非常有用。
5 M6 z( q( P8 U
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#查看指定源的全部信息

! V8 ]: `: \' t& W
原创:来自GIT小助手

  U0 w' x; A: s% d1 ?% z

本版积分规则

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

QQ|小黑屋|手机版|Archiver|艾拓先锋网 ( 粤ICP备11099876号-1|网站地图

Baidu

GMT+8, 2019-3-25 21:01 , Processed in 0.223928 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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