找回密码
 注册
关于网站域名变更的通知
查看: 239|回复: 1
打印 上一主题 下一主题

GIT的使用

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-9-11 16:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
GIT 的常规操作
" |( J( }  T$ j4 @) V7 a; y常规操作也是我自己平时常用的几个命令, 学自于 pro git 这本书中
( G# E: W. b( C7 k5 G
2 ~3 O8 q, o) \4 }: b' Egit 配置文件  p3 ~8 C$ k7 a) i
git的配置文件位置/ D1 `$ b( E0 F# Q2 W
针对所有用户:/etc/gitconfig. {2 `8 W9 P, q- |3 T, a% T5 `4 x: F
针对当前用户: ~/.gitconfig
0 c' t% i% Q$ L) W3 C! x# b& N+ l" x$ P
查看配置的方法
" h& u8 a: z" H7 J) ^" @4 j; F9 O3 W, a
git config --list
( l" n" K6 h! x修改配置的方法
4 b& }, G  |$ v) i( O9 o$ U* @) ?& V
git config --global user.name "wangyubin"  (修改的是~/.gitconfig)
+ C4 C. }2 D5 m1 l* |git config --system user.name "wangyubin"  (修改的是/etc/gitconfig)
. v. g* [( j8 p& t' }" ~git 基本使用
* @9 M" B7 n/ ]2 ]clone现有仓库, V  U+ L- O9 }. h
1 ~# y, q) [9 N( k' ^3 z
git clone URL  (URL支持git,ssh,http,https等各种协议)/ L/ d- U8 h* L5 _* h
git中文件的各个状态, j1 v1 Q) o! g2 ^3 B' r

; \4 U% s& J- U. r5 Iunstaged - git仓库中没有此文件的相关记录7 S: Y& ?* e8 U& C( u
modified - git仓库中有这个文件的记录,并且此文件当前有改动
" {4 {4 c* P$ mstaged - 追加,删除或修改的文件被暂时保存,这些追加,删除和修改并没有提交到git仓库' S% w( j3 ^( \$ T7 e0 F- n: R
commited - 追加或修改的文件被提交到本地git仓库(git仓库中大部分都是这种文件,所以git status不显示这些文件)0 {) R  r8 v! r6 P5 U5 M
查看git仓库中各文件状态% x% i3 c* s8 s( |, D- |* y

. |& z4 |6 S6 w' l8 T2 D3 hgit status6 b' `/ R. `$ ~4 C2 C
初始化一个仓库% y( s& k; \( V9 K% [. I1 g* ]( l
+ F& x5 g; {+ Z6 c3 D2 f$ r( b! I
git init
" J% F+ j7 R$ S" ?2 s' G- [/ _在当前文件夹下生成.git目录,完成初始化,此时此文件夹下的所有文件处于unstaged状态6 t( i( z6 y2 ]

; o  Q$ F+ d6 y4 {' ]2 O6 i追加文件
0 r7 l7 ?1 m0 t) h! V3 B1 f! K( _2 N
git add test.c5 R; j- @4 _# k
test.c的文件变为staged状态,其他文件还是unstaged状态; b% n4 \0 v( F! ~
& F! ~6 h& k8 B( f  i
5.1 追加文件的结果1 - 恢复为原先状态(变为unstaged)
- G/ f8 s- [2 U$ m* `/ v$ o; U6 q9 P- }. S
git rm --cache test.c% N  r  O* [6 a' \4 S1 F: y
5.2 追加文件的结果2 - 提交到git仓库(变为commited)/ c  F! G2 |# c
, t4 n* g6 c, R4 L( I( i
git commit -m "my message"( G  V' A  C& W3 j9 u
修改文件; N- y- t7 @* P6 c, h, P$ V
* I3 d5 W, C0 I. l' x
echo "aaa"  >> test.c4 t) V; ^* V# P4 ^7 G8 z
test.c的状态变为modified
# Y8 c. F$ r  H, z) S: ^: S  e. Q
6.1 修改文件的结果1
. |. Z9 I! B$ o! F. `$ a; A) M3 ?
git add test.c  (暂时保存修改的内容,即变为staged)' s. @2 N# y& `; R
下面有2条路可以选择:' f% o5 L1 O1 g5 `% L5 {
6.1.1 取消刚才的暂时保存! \- L, ]0 e3 S+ L6 {% l3 g3 a! b) F
  C3 [! _" P8 s9 k' T" Y1 Q: u& `8 ?
git reset test.c  (状态变回modified), J2 r% t# m" }; P. Z
6.2.2 将暂存的修改提交到git仓库
/ C$ a  h" K. I& V* d" J9 z9 ~  Q. o# Z# \" P' W# Y; q( E0 k
git commit -m "my message"/ y; }. o$ @8 A8 t
6.2 修改文件的结果2
! D1 a, f2 {3 ~! L, x' g; ?9 l: f% v4 L( I( s
git checkout test.c  (将test.c恢复为git仓库中的最新版本,即变为commited状态,test.c的内容和5.2节一样)
4 a5 U% t% q- j! A删除文件
8 @+ E2 N* B# H; H7.1 从git仓库和磁盘上删除文件& w" n/ j8 E+ J/ F
7 c* f4 g- C9 \( g. P
git rm test.c  (当前目录中删除了test.c,在git仓库中暂时删除了test.c,相当于staged状态)
1 g! v7 m. g7 x+ t% L8 Q: S7.1.1 从git仓库中删除test.c
1 x# ^7 ^- u- z7 h( y, {* b  s' t( V/ O4 f% a# q; O# ?& ~
git commit -m "my message"  (git仓库以后不再维护test.c); g  X" ]) C4 Q7 u% m/ O1 J6 u7 F
7.1.2 删错了,恢复刚才的操作
  k! v+ Y! ?) u4 Q) K; D' o
6 w8 v+ u# g3 L+ q* ^9 S0 Fgit reset HEAD test.c  (恢复到删除前的状态,当前目录中已删除的test.c也恢复了,test.c仍文commited状态)
8 {3 D2 m* T- b8 S7.2 仅从git仓库中删除文件& h- M. O& P+ f- Z1 I8 o) O9 w
4 q$ s. y! t4 r% O" [
git rm --cache test.c (当前目录中没有删除了test.c,仅在git仓库中暂时删除了test.c,相当于staged状态)
. O$ X! \5 p7 P' ]/ O+ Q; e" r, ~7.2.1 从git仓库中删除test.c$ e- x" p) q4 H; _9 [+ T; z  k! T

% f* r6 Q+ Q) y$ e3 c& agit commit -m "my message"  (git仓库以后不再维护test.c,但是当前目录中仍然有test.c)) m) R0 ?" A4 Q  M/ ~1 M3 S' s
7.2.2 删错了,恢复刚才的操作" Z# I4 o: X9 [" q( o! Y  h0 G9 c5 I" U

5 u/ G* X( q: ?2 pgit reset HEAD test.c  (和7.1.2一样)6 R( _: _5 y2 s0 L/ Y
7.3 误删除后的恢复
( r) b# s3 B( ~3 y如果删除了一个文件,并且commit之后发现删错了。也可以恢复,
3 u, B' U0 F$ [
$ b$ ^) Z( k/ v& S! m3 x$ Ngit log  (查看各次的提交信息)% j% \( f0 _7 j" s
git checkout commit号  (恢复到未删除前的commint号,此时删除的文件也恢复到磁盘上了)
5 m& [8 [/ V0 X" s8 W( |# {git checkout master  (备份好删除的文件后,再回到最新状态), Y! Y5 R* E2 J
git 远程仓库
/ |! Y" T9 a5 H/ s3 c1 ~4 `1 ^/ M; q查看远程仓库' n1 |: y+ S7 k& r
1.1 简单查看-所有仓库
6 Y+ v+ J8 ?( }
* K. B7 a: [; A$ Q  Ggit remote (只能查看远程仓库的名字)
+ F( k3 H) D' k5 y  s1.2 查看更多内容-所有仓库
" x; h- {: D1 ?3 q! i4 \' d; _, E7 K' o" v
git remote -v (远程仓库的名字及git地址)9 i! o8 ]. Q1 g7 A
1.3 查看单个仓库的信息$ d+ t! @' ?2 M/ N. n
8 I& B( U& D; O7 k6 j
git remote show [remote-name]0 L. w6 V1 A! ?" P
新建远程仓库
0 D& j: e- q( W
1 m4 c& E" A. Q1 e. Qgit remote add [shortname] [url]. G' x) q. A8 M% s+ `+ X0 C
ex. git remote add mc git://www.host.com/gitdir/mycode.git
* X- ~# c+ M5 o9 Q* ?9 `* T修改远程仓库
) C( l2 d8 }1 `; o/ B& E( `
$ Q, u' |/ N+ r# e1 ?git remote rename [oldnanme] [newname]: `6 d9 X8 q5 c3 I( K
删除远程仓库6 N9 j' q9 \& a2 s/ H' m

! [8 x/ v4 S* d% igit remote rm [remote-name]0 R3 X7 Y8 J, r" E5 N2 E# I
远程仓库的数据% ^, c& U3 B" f$ m
5.1 获取数据
9 M; I6 z; i7 h- }8 s
% O4 x' G! R5 Q0 u8 O4 jgit fetch [remote-name] (获取仓库的所有更新,但是不自动合并当前分支)
' w* C- B6 b7 M' Jgit pull (获取仓库的所有更新, 并且自动合并到当前分支)1 s" B+ r2 K4 w. e1 r
5.2 上传数据# w  `! E  }  t! ]) O

, j! }$ j$ p. w3 x3 Mgit push [remote-name] [branch-name]5 D) C3 }% ^: N$ Z+ i+ J
ex. git push origin master
9 o" e5 ~" E6 x- Jgit 标签
. H3 |  E0 ?" m! @4 n列出标签
* d) A, w/ J! m0 f  g7 a6 Y: _& E. S9 [1.1 查看所有tag( F5 j4 L' V5 I& x1 @, t' G
* [, c- B2 D/ N1 y. v- i
git tag% h0 D4 r) y" |, R  Q6 B
1.2 查看某个tag4 U0 `, \' n/ G- Y. F3 e) ~3 o
4 _: e2 [. F; g) a4 w9 _1 }- n
git show [tag-name]
' J) y2 ?& c# i0 q& V9 p+ M新建标签
" g! R/ a0 r) z# R& M5 X% K2.1 轻量级tag+ F3 _1 u2 T! ^  f8 }
4 R$ ^0 m* ], l" X  u# d- C
git tag [tag-name]  E9 Y0 P9 S7 t4 ~' B
2.2 带标注的tag9 k& z1 r  V& b6 N
5 v9 }* R) p1 R
git tag -a [tag-name] -m "tag message"+ o; y; d8 Z' k: X7 d
2.3 后期追加tag
6 p1 S/ [. h& D/ T+ I
; S( p0 R9 E0 ~, p0 q4 I8 Wgit log --pretty=oneline (查看所有的commit号)
+ r" z, i! o2 T% R2 i+ [0 u! xgit tag -a [tag-name] [commit号前几位即可]
, j& ?) v+ i" v" F6 Q  z5 y: ?删除标签& m7 ]  l/ ]: w% K# Z+ C. I

/ @( I" V- Z  ngit tag -d [tag-name]" n6 A% A9 {7 e% E( ^
提交标签到远程仓库2 m( J, E5 y( m$ w  f* G6 |

) [0 y8 z# l9 _- e5 B& dgit push [remote-name] --tags: F* y. e' {7 m: [8 |
ex. git push origin --tags  ^5 K/ o" q7 [" F3 V6 Q
git 分支  A4 R& [4 i# U* B( @
查看和切换分支5 K  N0 _( B5 [" Q
  ~9 G; c2 u4 A
git branch (查看所有的分支及当前处于哪个分支)
1 o  Y' S* B0 l" e! z) mgit branch -v (查看所有的分支的详细信息)- J- ?" p9 ^9 o' {5 d, r
git branch --merged (查看已经合并的分支)# f& q3 A8 W0 E* `# ^1 x
git branch --no-merged (查看还没合并的分支)
9 h: U: P0 d$ Ggit checkout [branch-name] (切换到某个分支)% b6 q5 E/ [: l
新建分支
/ w& ^4 f8 S8 S4 h$ H* I8 g+ M! e- F% T, ~" C
git branch [branch-name]  (新建一个分支)
6 K# V. C) L9 k3 i! h  Sgit branch -b [branch-name] (新建一个分支并切换到这个分支上)
9 G% u$ ?0 e, @合并分支
, n/ D, v2 p7 U# N
# }# Q9 L) K+ d& agit merge [branch-name]
3 }  p3 C6 W0 P1 Tex. 将分支btest合并到主分支master
% i! s: p7 X! n6 g; [/ ^  ogit checkout master
& F- r% w5 l  w; T3 H; ?8 K% U9 Tgit merge btest8 h+ }0 H* ~4 b% j! f2 P* |
merge时有冲突的文件会列出来,需要手动合并
* n. U/ P" Q8 I! G7 I6 T. X5 t
将冲突手动解决后,再次用 git status来查看是否还有 unmerged的文件。
# I) Z( w9 B- t2 z如果没有冲突的文件,就可以 git commit 来提交这次合并了。
: N* g- v- G; F+ ~! j0 S" s/ a% ~" _0 s! ?& f
删除分支4 N! q! j9 x8 K
5 x. j. k8 i8 I( O, A
git branch -d [branch-name]
# v; N7 a- G/ Y1 u或者 git branch -D [branch-name] (强制删除某个还未合并的分支): k3 e- Z7 x- o/ X7 F, D. m
远程分支相关6 }4 ]& R/ }. a# h
5.1 新建远程分支, U, o6 V4 q; e0 d( j6 o
. f4 ~6 N% n- {. c
git checkout [local_branch] (首先进入想要上传的分支)% g/ e4 B  _7 v3 x( M9 z
git remote add [remote_repo] [remote_branch]
0 O$ Y' E7 @( _0 W" X(这里的[remote_branch]是远程分支的名字,一般和[local_branch]同名,
( a* r! D5 P0 j  Z[remote_repo]是远程仓库的名字)
3 P. _$ V( N! _- @: z5.2 向远程分支推送数据
& K  r, r: D$ z8 O# h; j" u3 }" @5 y3 Q; n! k" X4 E! b8 J
git push [remote_repo] [remote_branch]* u1 ?# p& I. H4 w/ P' D7 \8 S( ]
5.3 删除远程分支
8 S0 y% L2 D3 Y' L0 e% s; D
# _% ^* C! G( E* r3 y% ?5 x% Vgit push [remote_repo] :[remote_branch] (注意远程分支前有个":")
( I4 ]* V( O" E3 v1 r. I) \合并分支的另一个方法:衍和0 m. t8 w( r: r8 T9 M. `

  S2 K1 d0 W$ ?2 h' L4 @6 g  c衍和可以简化master上的提交记录,使得代码可以方便的回退,
6 W6 V+ s6 i& w5 T; i% L6 u但是在公共仓库上用衍和有一定的风险。
& X6 T+ g$ s! E; L4 j衍和我基本用不上,这里就不赘述了。$ {) m2 N3 u7 b
+ w; _) i' o4 W' @. z
服务器创建 git 仓库, 并将其作为远程仓库2 E. t. A0 B9 D7 L# W3 e6 S. e2 I
其实 git 是分布式的 SCM. 并不存在谁是服务器, 谁是客户端的问题, 这里所说的服务器上的git仓库, 指的是多人合作开发时, 共用的, 作为最终发布版本的 git 仓库.
0 Q8 e3 u1 _2 D; S6 S这个 git 仓库就相当于你在 github 上建的仓库, 会将你在各个电脑上做的代码等提交到上面进行统一管理.
9 V2 P5 \. B6 W/ \/ d1 \- b$ W" ~1 F; [% m) X- Y. `+ k# ]
服务端 (远程 git 仓库)
$ @  P. p4 j2 t$ J2 i生成用于git服务的账户 (一般就用git)! M3 }6 L* S, ~3 b- o
' n3 G( M$ {$ ?9 `9 N
groupadd gpxxx% q# d! j8 O) O0 a0 @% X
useradd -m -g gpxxx gitxxx
  C  ~/ T4 `9 A* `- @- w初始化服务端的git 仓库
2 n2 K! |4 t' h% B: t* ]2 `
+ c( O# `2 p# m/ Ucd ~/
) G- w. h/ Z+ ~8 |( _mkdir git-repo
* j5 D& j; {2 O9 k0 Rcd git-repo' g7 S+ m' b# `1 ?7 B( S; Z, E+ a1 c8 F
mkdir test.git
4 m- M6 M6 K: U2 u* i# z9 P5 fcd test.git
( L6 T' }4 c3 X2 C$ O) O: y" Wgit --bare init
; ~; w% p  D5 }5 Q& m; R% C5 m7 L客户端 (本地 git 仓库)
; Q, G3 _) f+ M6 y! N- d新建本地git 仓库
& k, S" \0 Q% K' X
; q3 n0 f- n7 [( G! F3 s  r+ b$ dcd ~/gitlocal* b% T& u) ^/ E$ O2 v5 l
mkdir test
3 `' ?) I1 r" p5 ~8 ncd test
8 V0 `( v" y/ s' v! c7 ygit init
" ~1 H  l- z) ^1 o初始化本地仓库! t: u) F0 A: y

9 X) X- o+ e% b' W9 Gtouch README0 _1 u# S, V! V; l0 j3 S  G8 O- O
git add README
$ E% J8 c4 q4 z/ X5 d7 i2 M) g$ zgit commit -m 'first commit for init'
8 g& i! E1 S& C$ }2 s: |4 u设置git用户信息: B2 b+ H% e* |8 M( v- @

3 p; y" j& }6 U( i7 g! k7 jgit config --global user.name "wangyubin"
) o. y" r( t$ U9 N% |& Q2 agit config --global user.email "xxx@xxx.com"
& [5 m, s; P" a5 k; Z$ O关联远程仓库+ ^/ I+ r. J8 f

( O3 j8 T0 k+ d7 [- g& ]git remote add origin gituser@<server address>:~/test.git/
% l. m' o8 v/ w4 P将本地仓库提交到远程
  q/ y: ~0 H0 Z  j
! }2 A( ?! [& agit push origin master3 C) K8 K# q, k$ @" d
git 使用中遇到的一些问题
5 E" C1 x& i, t( I$ Egit pull 时, 远程文件与本地文件有冲突- n3 Z% s9 J! d
如果远程的仓库被其他人更新了, 并且更新的内容与我自己本地编辑的内容有冲突. 这时执行 git pull 可能有如下message:/ k# s$ b' M. f& [

3 A2 F1 I( i. }  SAuto-merging path/to/conflict-file# W+ J5 v' N8 v
CONFLICT (content): Merge conflict in path/to/conflict-file4 d' l  y  j3 P/ l
Automatic merge failed; fix conflicts and then commit the result.4 D) J6 Q3 Q, ~; t8 b2 `, H; M. y
用文本编辑器 vim 或者 emacs 之类的来编辑冲突的文件 path/to/conflict-file, 冲突的地方有类似如下的显示
2 D! i; B+ A% U7 {5 J% K3 ^
$ ?) U; Q9 x; ~% `<<<<<<< HEAD- ~7 p( n& I2 I( L8 o
    App_Log.logger.debug(u'开始时间: ' + utils.datetime2str(datetime.datetime.now())), l, N7 F3 B9 `- X
    file = request.FILES.get('file-xxx')0 Q1 b( A+ x3 S3 i$ b
    App_Log.logger.debug(u'结束时间: ' + utils.datetime2str(datetime.datetime.now()))
: E5 [+ a, J0 G2 Q$ q1 e, J
; Z# Q$ K+ Q: Z2 I5 h7 O% O=======3 P2 g  b. D! w( K
    file = request.FILES.get('xxxx')7 H' T, ~' p' L; t7 Q( r
>>>>>>> 3602514cc2bf1b3a64470b31ad79e07fe372add5- B$ o+ f# K! @. e+ r
===== 之上的 <<<<<<< HEAD 是本地的内容6 \! H+ L3 B: K: |2 x' b
===== 之下的 >>>>>>> 3602514cc2bf1b3a64470b31ad79e07fe372add5 是远程的内容(这个commit号每次都会不同)3 o4 b  `8 k5 U: b
根据实际情况, 删除多余的内容(包括===== >>>>> <<<<<< 之类的), 修改冲突的地方, 如果以本地的代码为准的话, 会得到如下结果:
! U- }$ W& A' Y% h2 K
) r# e- x* [# V! N( lApp_Log.logger.debug(u'开始时间: ' + utils.datetime2str(datetime.datetime.now()))9 i' A( B( ^8 I  u  b  f8 I' b7 g
file = request.FILES.get('file-xxx')- n0 v' |4 k* m$ d6 X
App_Log.logger.debug(u'结束时间: ' + utils.datetime2str(datetime.datetime.now()))1 L/ s* j  C) v/ S
然后 git commit -am '提交的信息' 就解决了冲突.
7 s  e  G% Z0 s2 n7 C+ S: ?最后, 也可以将本地的修改同步到远程 git 仓库: git push
5 s" N+ Z  b+ h" [- O+ e! n4 ~( W2 o* M' v6 m2 g; E5 S7 y
git pull 时, 本地还有未commit 的文件
& M$ a; E- z7 d  `& h+ x从远程仓库更新时, 假使本地还有没commit的文件A, 远程仓库的A文件却被修改了. 此时进行 git pull 时有如下信息:
. K( o% o! n7 j6 l+ n; r" J  _. S5 Y2 P/ D8 s4 N$ n
6a707cc..f93575d  master     -> origin/master
" I/ E) d( m. k# H; pUpdating 6a707cc..f93575d& Z4 n5 Q1 E' s% T" d  m, F& w1 }
error: Your local changes to the following files would be overwritten by merge:
2 h4 K# l4 E- m    apps/myapp/utils.py4 L+ X$ `6 ^* I2 y+ W! m
Please, commit your changes or stash them before you can merge.
9 t% k7 h4 j; S; h0 Q- ?- f4 MAborting& X9 B$ o1 R% f$ j9 |7 i* o
此时, 如果不想将本地文件commit(可能只是临时的修改), 但是又像将远程的仓库更新下来, 可以这样:0 j# i/ s, u8 |6 [/ z* U/ Q3 K
  S6 A# l" `5 b
$ git stash    # 先将自己的改变保存起来. @8 w/ ^- i' P. M+ ]
Saved working directory and index state WIP on master: 6a707cc ...$ J, n( q9 z4 n, v! T
HEAD is now at 6a707cc ...
- f4 M: z$ e5 I, Q1 k0 ?: U7 s$ git pull     # 从远程仓库更新+ }+ A+ j5 z% S* F$ }; V& P; g
Updating 6a707cc..f93575d
3 y" |- |( ?1 {6 Y- w... ...
9 I" L; g2 T# x, N1 N3 ]$ git stash pop   # 将自己的修改合并到更新后的代码中
* d: t  w( I! h最后一步如果有冲突, 再参照上一节中解决冲突的步骤, 用文本编辑器修改冲突文件.
2 K5 x; K, i  A4 p0 }1 Q" U. M0 C& V% s3 ~8 \
git 分支合并时的冲突0 O% l& d; h9 |, V! ~
正在开发的分支和主分支的编辑了同一个文件时, 在主分支上进行 merge 的时候可能会产生冲突.3 H! e3 G3 _0 l, q. K+ f
以下构造一个冲突的示例:, v. [9 M8 g" y* _7 t

, Y4 o. n: B, M- _' `- v5 }, G$ git branch test  # 创建一个分支 test, 但是没有进入test分支, 此时还在 master 分支上.7 W+ v/ j' ~8 `: A) g
$ vim xxxx         # 编辑 master 分支上的一个已有的文件9 T0 _: e; A' W6 D, |: m1 F
$ git commit -am 'xxx message'  # 提交 master 分支的修改3 j+ p, x: S$ `. ^  k- y4 \: K% Z7 P1 {
$ git checkout test    # 切换到 test 分支2 {+ V0 z5 F% }0 z
$ vim xxxx             # 编辑之前在 master 上编辑的文件, 可以编辑同一个地方, 造成冲突" c  Y7 j3 l' u0 j1 O
$ git commit -am 'xxx message'  # 提交 test 分支的修改
% X! c! J! T8 s" B) k$ git checkout master           # 切换到 master 分支0 \% k4 F8 G, A2 B2 x7 y
$ git merge test                # 将 test 分支合并到 master 分支, 由于上面编辑了同一文件, 这里会产生冲突
; Z" D' Q& ]& D; cAuto-merging xxxx
% H  Y7 W1 |, g" m, GCONFLICT (content): Merge conflict in xxxx, g! l2 h1 K: U
Automatic merge failed; fix conflicts and then commit the result.. c* Y. _6 `# c7 ]( K- ]
最后, 参照上一节中解决冲突的步骤, 用文本编辑器修改冲突文件.
" _( j& N" B4 l# p' L; b4 a( j  d' a0 Y: ^  T. n% }0 g
通过 git 提取补丁
. z4 B! R! Y5 I. W提取的补丁的方法有多种:
. D) E" F- p' L$ v( o  X, @: y
$ ~' d+ P- {: ?) X( x! p: O, n$ git format-patch -1     # 提取本次 commit 和上次 commit 之间的不同, 并生成patch文件
+ d5 a# s) F% N$ git format-patch -2     # 提取本次 commit 和 上上次 commit 之间的不同, 并生成patch文件6 \9 T" L# e: y7 `9 A+ ~
$ git format-patch commit号1 commit号2  # 提取2次commit号之间的不同, 并生成patch文件 (commit号可以通过 git log 来查看)
6 ^* [4 V9 f# n# H+ f$ git format-patch tag1 tag2            # 提取2次tag之间的不同, 并生成patch文件 (tag可以通过 git tag 来查看)
6 F5 J: [  b4 l4 a5 q( D通过 git 提取指定版本的源码
6 r1 M5 C- v  s: Y& k/ i这个功能在部署的时候比较有用.
+ a% N# g9 A' X. U
* c) z' Z+ s2 H9 f% I+ W; D  f( p" j$ git archive --format=tar --prefix="tagxx/" tagxx > ../tagxx.tar  # 获取 tagxx 的源码, 加了 --prefix 的作用是在最终的 tagxx.tar 中加了一层文件夹 tagxx( L' P' b- u& d$ O7 N$ S7 g5 M: h/ |
上面的 tagxx 也可以是 commit号
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 03:43 , Processed in 0.140625 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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