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

GIT的使用

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
GIT 的常规操作
% x  c0 U% _: S3 _5 x6 z( h# Q# r1 w常规操作也是我自己平时常用的几个命令, 学自于 pro git 这本书中
( p1 q/ A# G  i7 k7 Z; W
( i) ^" ]) @! ?$ egit 配置文件
, Q' {% S: A0 ?4 e' D. `% sgit的配置文件位置  S4 A: O4 e- u
针对所有用户:/etc/gitconfig1 d6 i% l  M) _( }, p
针对当前用户: ~/.gitconfig
. g" o( }6 R( @" I; [% T# e! y
8 s" K. S, ^2 ?查看配置的方法8 x2 M! L3 c8 z
. i0 e! k9 J* d* `" \. D# h. I
git config --list; I/ a, Z1 n7 U* Y8 @
修改配置的方法
7 r1 S- L6 L# Z& e1 L
! C4 j! I7 i: k. Y+ a5 H/ P- sgit config --global user.name "wangyubin"  (修改的是~/.gitconfig)
! q! b& F4 g. Y% s6 cgit config --system user.name "wangyubin"  (修改的是/etc/gitconfig)$ @! G* l2 |4 G8 `$ S. [4 |2 `
git 基本使用4 F- E9 r1 T* `
clone现有仓库% v; y8 v# E$ n1 M

0 c7 Y& m& Y* G; A2 S6 T6 sgit clone URL  (URL支持git,ssh,http,https等各种协议)
' s  p8 H# H3 a; s3 Hgit中文件的各个状态% a; w' O% W. M
. y2 [1 I4 K! K# n
unstaged - git仓库中没有此文件的相关记录4 j- J9 ]+ F8 _/ |; [6 C1 n
modified - git仓库中有这个文件的记录,并且此文件当前有改动# u" T2 p0 e" o
staged - 追加,删除或修改的文件被暂时保存,这些追加,删除和修改并没有提交到git仓库5 q/ O, X! Q# v3 p1 f6 ?  k
commited - 追加或修改的文件被提交到本地git仓库(git仓库中大部分都是这种文件,所以git status不显示这些文件)# G% k$ W- n/ m. c3 x- \; ~3 C5 j$ ]
查看git仓库中各文件状态
0 b: p6 G4 ~6 N+ u: p! ^- B( b. {  p& `; j! J  N
git status
& t5 f  h1 E+ C5 r. ^$ S* s! C初始化一个仓库
5 K$ S3 r* Y, P* j1 h2 h  p$ E$ p4 O6 W8 Z( O# n2 J
git init
( z  [% C, Q5 t+ O( G在当前文件夹下生成.git目录,完成初始化,此时此文件夹下的所有文件处于unstaged状态
5 `/ Y0 d3 [% y3 ?1 p! y5 H1 e, Y! \0 k4 p* J" ?% s
追加文件
- |/ c( Z! R) Q! j: I
( o/ k! W& f; Mgit add test.c
5 o6 N# W5 e, I/ T+ t7 u2 Utest.c的文件变为staged状态,其他文件还是unstaged状态
. V3 b( Q' s1 s  k4 N/ F3 O8 P, S0 S& T1 J0 `( W. D
5.1 追加文件的结果1 - 恢复为原先状态(变为unstaged)* j; [* c: `7 L9 V

' A6 y, y6 O9 ]" a7 Ggit rm --cache test.c
- K' Z$ K' [3 ]2 E  x5.2 追加文件的结果2 - 提交到git仓库(变为commited)
5 G2 R3 Q8 M0 z/ Y$ y3 ?- H9 j9 P0 o/ j3 _
git commit -m "my message"; K; N! S) {, X  k( P
修改文件1 L( c# I7 s. [/ u1 d4 I( m1 ]

, i, Y5 w( t2 Z. d8 F) C) k9 X' iecho "aaa"  >> test.c
* h% \3 |( `0 r7 |7 k: _test.c的状态变为modified' A- I( d2 v6 h9 w/ I$ N
! H0 _0 A& k5 P# `9 M  X, i
6.1 修改文件的结果1+ N" ^6 h& H  F. \. ~2 W; x

% F2 Y) A% C' B( N! R9 W% L2 {git add test.c  (暂时保存修改的内容,即变为staged)
  d; G" A7 `2 D$ E! Y* i下面有2条路可以选择:
! s" k4 s( _- {( {  o7 V5 Y( a6.1.1 取消刚才的暂时保存
$ X- p& s: C: U4 M0 f; f' j8 Q0 x3 e4 F7 q; X* J
git reset test.c  (状态变回modified)
- {3 |4 I1 k, [  p- e0 ]6.2.2 将暂存的修改提交到git仓库  g* Z4 f; t$ g9 b0 a
! C: V4 v9 H6 j" |& s2 P
git commit -m "my message"$ _1 C$ `2 \2 }, |( ]) j$ @
6.2 修改文件的结果2
  ~, }: f: @6 q" r& I% ]( R$ S; q8 ^  D
git checkout test.c  (将test.c恢复为git仓库中的最新版本,即变为commited状态,test.c的内容和5.2节一样)2 y% {# |3 x8 m' i
删除文件
. g9 P2 n% n) C& V4 r7.1 从git仓库和磁盘上删除文件  B4 Q, a8 H; ~4 {* [: |) z

. B4 P2 r& H: Y* Z" B3 ^4 A  @9 igit rm test.c  (当前目录中删除了test.c,在git仓库中暂时删除了test.c,相当于staged状态)) b/ x$ J" r8 _+ B/ |; g
7.1.1 从git仓库中删除test.c
( R4 b2 @; W$ G: S5 T5 i4 N
, ]  m- L3 E  r9 B# y# u1 k6 bgit commit -m "my message"  (git仓库以后不再维护test.c)
$ ?! `- k: Z. |3 H( Z3 X4 P7.1.2 删错了,恢复刚才的操作; z  W+ U6 O; ^/ ]9 p

0 Q$ ]8 T- i$ t) X* F. pgit reset HEAD test.c  (恢复到删除前的状态,当前目录中已删除的test.c也恢复了,test.c仍文commited状态)( ^/ ?  r! y% t& B
7.2 仅从git仓库中删除文件
0 {: W9 V- E$ v8 [1 C9 K5 |
4 j) B0 _; p9 o  R  x' ]git rm --cache test.c (当前目录中没有删除了test.c,仅在git仓库中暂时删除了test.c,相当于staged状态)9 v' R1 `1 I, C- x/ `. U. E6 p" [" q# [
7.2.1 从git仓库中删除test.c9 }% b2 B1 k( N$ ?! J
/ Z* E7 s: r* }( v, ?
git commit -m "my message"  (git仓库以后不再维护test.c,但是当前目录中仍然有test.c)- u% \$ T& V- L% f- d
7.2.2 删错了,恢复刚才的操作" O4 W# ?6 A( ]$ {: U( ^

' W5 t  `) O- B8 g1 cgit reset HEAD test.c  (和7.1.2一样)
7 L( [8 Y. v" Q2 q" C3 o7.3 误删除后的恢复
& M$ @/ h7 a* [' Q* U如果删除了一个文件,并且commit之后发现删错了。也可以恢复,
. h. B6 Y* x, ~( x! E
. }: \) g' h3 {& o- Dgit log  (查看各次的提交信息)
2 u# l: \- [1 _1 U! X, bgit checkout commit号  (恢复到未删除前的commint号,此时删除的文件也恢复到磁盘上了): _3 K- G3 n: C- ?$ r
git checkout master  (备份好删除的文件后,再回到最新状态): ^7 b3 |. I% f4 I
git 远程仓库! {- y* U  Y0 c1 g
查看远程仓库
5 J( A# @4 X0 z/ u5 F' j" u1.1 简单查看-所有仓库
, b/ O: u0 O  J# F  [9 L& n4 q# a  @0 x$ a/ J7 s
git remote (只能查看远程仓库的名字)
* O0 l! ?/ g/ L4 b# h1 H  L1.2 查看更多内容-所有仓库" R- M. w6 s) r/ g; p

; T6 t: W+ {2 O  J! lgit remote -v (远程仓库的名字及git地址)- v8 a& w' b& ^2 ^1 G5 s0 r
1.3 查看单个仓库的信息% k) V0 e" w( I1 E
$ [3 d5 C& d, Q
git remote show [remote-name]6 V$ v, G8 V2 q. J; b
新建远程仓库8 H/ Y; U' o4 I9 v% w% ?# j

: ~+ T+ ^+ t  n/ fgit remote add [shortname] [url]
8 {' D  U" J2 ?. w" v3 ^8 t) d% hex. git remote add mc git://www.host.com/gitdir/mycode.git
( Q  N' i$ j( K. l+ J) V/ I修改远程仓库
& F: m0 \7 O( n/ ^: Q" c5 c# y& l! Q. z3 G2 l
git remote rename [oldnanme] [newname]
4 G3 a) p5 r9 V$ O删除远程仓库
8 _/ s- l3 j& p& H" ~4 K# {! n
; B+ a- f. M( L( t  rgit remote rm [remote-name]
4 E7 L: j+ m/ X7 e9 ?远程仓库的数据
( g8 L; F- D6 K0 t7 A- Z% A! T5.1 获取数据
3 w8 t' h$ E6 v7 Q, s0 j# _( R4 g
git fetch [remote-name] (获取仓库的所有更新,但是不自动合并当前分支); c- b  z2 U2 |
git pull (获取仓库的所有更新, 并且自动合并到当前分支)/ a- }* S& k8 k8 \
5.2 上传数据
4 X" K$ G$ [$ N% _8 @7 @
3 L* p1 D( G. T; ]7 S( O1 E6 S* t: xgit push [remote-name] [branch-name]
) C! W* _, L; d0 ^2 k& I" m, Fex. git push origin master
% w1 x6 s/ G. Igit 标签
$ }+ ~) ?4 w/ r' G6 Y2 E' K列出标签
$ M0 N& H, b. E& N+ u! o1.1 查看所有tag
# M5 N( E7 j9 c( b
- u6 U6 F1 T4 E0 \. igit tag; O5 ^" N3 ^3 z
1.2 查看某个tag7 O# G' C2 L% E: t& U8 V

* x1 d7 g& g8 B6 ggit show [tag-name]2 k/ g, Z9 Z( w, {  w7 p4 i
新建标签8 o- b' @) R/ K% F
2.1 轻量级tag
5 O% d1 C. N/ u0 A, t' n
- P6 N9 e; U( l! S1 X3 Rgit tag [tag-name]. Q: P( M$ J- n" K2 z3 K5 i
2.2 带标注的tag
8 g. u! I% `. r2 u3 P/ x3 ?2 E6 y& A" w
git tag -a [tag-name] -m "tag message"  d  [* j/ R1 Z
2.3 后期追加tag
+ @! f+ h7 E; R' X5 b* B, d/ U
& {7 l2 [9 V! y/ |- X- P4 Agit log --pretty=oneline (查看所有的commit号)
  d- I& n" O5 m. ]' ?% q* Vgit tag -a [tag-name] [commit号前几位即可]
0 u/ x4 W# z- T7 z  ]5 o2 t" w删除标签
' r) ^2 F9 V! i$ f
* F6 E7 I, X2 qgit tag -d [tag-name]
3 T& N- `2 I# l0 W% R提交标签到远程仓库
9 Q; A; k$ n6 {5 I, I! b
1 s4 _3 H; I7 Z1 n. P0 t6 Q$ Fgit push [remote-name] --tags
) G! f- [. y, j, k$ fex. git push origin --tags
$ S! ^' Z( _7 q! h1 R: R9 _0 t0 jgit 分支, i) S: Q* z, K) x) q2 l7 l$ U9 y
查看和切换分支
& @0 `* q1 \0 }  K( {
' C3 b2 v7 d; a( ogit branch (查看所有的分支及当前处于哪个分支)" Y2 Q/ p1 E+ ~+ s
git branch -v (查看所有的分支的详细信息)
1 I3 w& ^* w( _( R! B1 t2 H9 igit branch --merged (查看已经合并的分支)9 G! @5 L# p5 b! F  s. I: k
git branch --no-merged (查看还没合并的分支)
9 h# S/ g9 V+ d% ^  Qgit checkout [branch-name] (切换到某个分支)2 y, K9 I$ ^' `; X9 {5 ~3 u
新建分支
' k5 [: p; L: |- W+ w6 p
$ A0 s& l! W0 N- M8 U( Ygit branch [branch-name]  (新建一个分支)
9 A- c6 N3 ^% t0 B) pgit branch -b [branch-name] (新建一个分支并切换到这个分支上)9 f1 @0 K- n2 B$ m% f6 |; M' _3 A
合并分支
9 v/ [) H9 |3 S/ p; `' I
2 t# W( H' _* W9 Z6 _) l' kgit merge [branch-name]
7 \5 `# Q2 e* `4 Sex. 将分支btest合并到主分支master
  ^! d( V: e+ f; Pgit checkout master- L& m) n5 C) w' w. }
git merge btest) e0 Z+ V2 u9 i
merge时有冲突的文件会列出来,需要手动合并
) a% o# A! x# Z% \
- S/ n1 ?2 q6 H" x将冲突手动解决后,再次用 git status来查看是否还有 unmerged的文件。
) ^+ E* E* O5 \. h如果没有冲突的文件,就可以 git commit 来提交这次合并了。
7 Y6 i6 t( f  k8 z6 L, W  X2 q) Y: G  S) b4 c# d
删除分支
  u; V* M( }2 I! F7 r% V1 {+ d) H3 S* X) b5 i& t
git branch -d [branch-name]8 c% a; K3 u' B' {  M/ k
或者 git branch -D [branch-name] (强制删除某个还未合并的分支)5 f7 @) s9 {5 L) [+ x& f$ b
远程分支相关
/ I, Z% L& [& w$ t2 _5 G! e5.1 新建远程分支9 W: h- |+ }- x1 e' w

7 v: J+ f: {) J5 x: p0 ~git checkout [local_branch] (首先进入想要上传的分支)
! s* x7 ^! M9 A% v2 \git remote add [remote_repo] [remote_branch]- V. m% R1 A& w0 q/ I' U, |4 w
(这里的[remote_branch]是远程分支的名字,一般和[local_branch]同名,, N/ e3 o) z8 i; G0 W' @7 `9 v
[remote_repo]是远程仓库的名字); f2 S, r+ u& V1 t
5.2 向远程分支推送数据9 h+ ~3 u& g6 O' ~( _3 l
4 s7 `- y; g2 ~( Y4 ?+ L9 Y; q$ K
git push [remote_repo] [remote_branch]0 k# ]  ]0 w' V4 ]9 D- ~0 N
5.3 删除远程分支+ z  }' n! B, i1 H7 |% }1 Y

9 \: _( v2 x- M/ sgit push [remote_repo] :[remote_branch] (注意远程分支前有个":")- ^2 f( J0 W0 t" c
合并分支的另一个方法:衍和
, I, T! |) W! c
: c8 b& A  R4 V! o& ]% i衍和可以简化master上的提交记录,使得代码可以方便的回退,6 V' `: O9 o6 P6 y
但是在公共仓库上用衍和有一定的风险。
! j1 r0 P  \) a4 t* X衍和我基本用不上,这里就不赘述了。
& W$ ~+ l2 a0 z+ F! F, Z
* {5 E9 F$ o# z0 I服务器创建 git 仓库, 并将其作为远程仓库- c/ I, B/ K) H. H! ~+ |
其实 git 是分布式的 SCM. 并不存在谁是服务器, 谁是客户端的问题, 这里所说的服务器上的git仓库, 指的是多人合作开发时, 共用的, 作为最终发布版本的 git 仓库.3 J* N/ I  Z8 A; Y$ W7 f9 V
这个 git 仓库就相当于你在 github 上建的仓库, 会将你在各个电脑上做的代码等提交到上面进行统一管理.
8 H: ^" w9 C$ X2 _# S$ Z3 o7 R, x% p  c" }! Y
服务端 (远程 git 仓库), ?) O0 ~& N$ X
生成用于git服务的账户 (一般就用git)) ^3 @7 e' y/ Z& k( q+ K9 i, \

$ q8 F2 h+ }! g8 S/ c$ d! f$ egroupadd gpxxx
7 Z2 J; C6 k$ v) N+ d8 Q+ k; D- buseradd -m -g gpxxx gitxxx1 J& I) a3 t' x
初始化服务端的git 仓库
9 q) {! \8 T0 x' R
$ I! _6 F7 P! d0 U! n8 d% [6 N! ~cd ~/2 R+ d& s# i' r1 R8 `
mkdir git-repo7 S( O+ ~' H+ u. F
cd git-repo( `0 ?2 p  K& M4 z8 K3 x
mkdir test.git. m( ~. O+ n* F8 E3 H5 X
cd test.git3 w1 @: u' y+ G, c" Q
git --bare init
/ x8 S, D; ?5 N/ v客户端 (本地 git 仓库)
; B  U7 P2 e4 I/ S3 e新建本地git 仓库
) M; E# X: c) {4 V% ^$ ?
4 w$ `" F$ A3 S7 z) Scd ~/gitlocal6 R1 D" s6 q8 G. @3 L+ a
mkdir test- S- |' {, k, p
cd test" H* C6 f  t+ e. G/ C5 A
git init
- H3 s7 \8 Z, d初始化本地仓库
! u4 S! D' @4 F4 H* @/ `8 ]1 r, L, B6 H7 z2 V6 b0 n
touch README1 u5 @7 x/ q  V- n! \. h* B. D) x- z
git add README
, E4 q$ J/ N7 z( Rgit commit -m 'first commit for init'. z5 d9 r! N# Z9 g% ~( b7 j
设置git用户信息
: Z, p; i7 s3 m3 O# f4 ^" F; a* ^/ x: g
git config --global user.name "wangyubin"
) w9 l1 f9 x  b& \$ h, L5 cgit config --global user.email "xxx@xxx.com"% |! N; l& o& ?4 G( k
关联远程仓库
. o7 V+ y  m& K
0 Y/ v4 r5 u. i3 X1 p" x' ?git remote add origin gituser@<server address>:~/test.git/
! e  y3 v% q5 Q2 L3 {将本地仓库提交到远程3 k! l# ?0 y7 E/ u% b+ D. N
& p: q7 Z( X: P6 G3 E
git push origin master- L# H  e; j% c
git 使用中遇到的一些问题3 q1 M& K) X0 }4 ?: K( {/ _+ a
git pull 时, 远程文件与本地文件有冲突
" `% S% C2 }6 x6 g; L7 Y如果远程的仓库被其他人更新了, 并且更新的内容与我自己本地编辑的内容有冲突. 这时执行 git pull 可能有如下message:
( v! ]* P  d! A# i7 j3 D0 X$ K2 w7 r0 t( D  _4 V, d7 X+ f% X
Auto-merging path/to/conflict-file
1 \  T! Q  U# _3 m, @CONFLICT (content): Merge conflict in path/to/conflict-file
9 q' g! \% F! NAutomatic merge failed; fix conflicts and then commit the result.# c4 q6 S3 b- J# ^/ m) P
用文本编辑器 vim 或者 emacs 之类的来编辑冲突的文件 path/to/conflict-file, 冲突的地方有类似如下的显示
5 S# x' C5 \  G1 ~4 ]% x; B) i9 m3 v4 A5 C* n1 n8 K: a
<<<<<<< HEAD
: S9 H- E& k: |    App_Log.logger.debug(u'开始时间: ' + utils.datetime2str(datetime.datetime.now()))( e2 }  j- c0 R  E2 q0 F8 I  o
    file = request.FILES.get('file-xxx')
1 O, E6 e4 G  c2 F8 n) G: I    App_Log.logger.debug(u'结束时间: ' + utils.datetime2str(datetime.datetime.now()))
  c1 M2 B9 ~" N) x1 L7 Y$ U* q: I$ z. `2 a$ @0 L
=======
3 A: h; i5 H1 c! C    file = request.FILES.get('xxxx')  B  h* {( g- t4 j/ |8 I+ W4 ?
>>>>>>> 3602514cc2bf1b3a64470b31ad79e07fe372add5
$ W% a- L3 L$ u( @6 y7 J0 n; I===== 之上的 <<<<<<< HEAD 是本地的内容
( {  H8 l& u& w1 X- v6 D5 B' H===== 之下的 >>>>>>> 3602514cc2bf1b3a64470b31ad79e07fe372add5 是远程的内容(这个commit号每次都会不同)
; s, }" t8 B8 a' @+ C% M根据实际情况, 删除多余的内容(包括===== >>>>> <<<<<< 之类的), 修改冲突的地方, 如果以本地的代码为准的话, 会得到如下结果:; ?# k1 ?, q+ q. Z) V' Y
" G, U4 i9 D7 I$ H* h
App_Log.logger.debug(u'开始时间: ' + utils.datetime2str(datetime.datetime.now()))7 u" B8 I, ?, p/ }
file = request.FILES.get('file-xxx')! m! U) V! F; A: K8 ]
App_Log.logger.debug(u'结束时间: ' + utils.datetime2str(datetime.datetime.now()))9 l% Q4 }1 P) ~4 O/ n6 p
然后 git commit -am '提交的信息' 就解决了冲突.
5 f6 ^! `0 {# h: Y+ s9 W最后, 也可以将本地的修改同步到远程 git 仓库: git push9 h1 A' c2 \" q/ z/ ?% s

  B' l2 t% e* \$ v, P1 @4 rgit pull 时, 本地还有未commit 的文件
: O; C( q, q$ |3 F/ ]: t2 S从远程仓库更新时, 假使本地还有没commit的文件A, 远程仓库的A文件却被修改了. 此时进行 git pull 时有如下信息:2 ?8 V% U# U0 F/ a5 m
9 k6 ]8 f" X0 I5 n9 [0 }4 v; S
6a707cc..f93575d  master     -> origin/master
* b5 w4 H; s4 }. S; z" jUpdating 6a707cc..f93575d% c! f9 P% t" Y! U' l  E
error: Your local changes to the following files would be overwritten by merge:4 k) A9 q9 [0 Q+ l) ^
    apps/myapp/utils.py5 B$ p- X; @( t; O$ O% ~  X
Please, commit your changes or stash them before you can merge.
# F! ?4 t% a8 dAborting' N5 E' D+ n0 J: Y6 q
此时, 如果不想将本地文件commit(可能只是临时的修改), 但是又像将远程的仓库更新下来, 可以这样:
1 H3 s" U/ z6 \, Y+ N! ]: |( G6 T% l6 \( _1 y
$ git stash    # 先将自己的改变保存起来
* S: u  t# H& _' G. @+ }. ?7 fSaved working directory and index state WIP on master: 6a707cc ...
8 d) j* T2 Z$ d8 V( |' dHEAD is now at 6a707cc ..." t9 z& {9 ^1 E3 v
$ git pull     # 从远程仓库更新# B: G; Y4 V4 @, J) q" v; p
Updating 6a707cc..f93575d3 |# P1 N& B0 U! O6 R! h
... ...
1 g1 a( n& M# G$ C' A) t$ git stash pop   # 将自己的修改合并到更新后的代码中! ~$ }; a9 u' j- s% h: ^
最后一步如果有冲突, 再参照上一节中解决冲突的步骤, 用文本编辑器修改冲突文件.( y7 x  h, j: _5 b  @) P3 R

: W1 p& d9 w. i4 V' ^5 mgit 分支合并时的冲突
5 q" F3 {# ]3 @( u( t% G正在开发的分支和主分支的编辑了同一个文件时, 在主分支上进行 merge 的时候可能会产生冲突.
+ M" |4 {7 I+ \1 }. x以下构造一个冲突的示例:
& H% T$ f& v$ h
5 U. ?& }. X: |% o9 C$ ~" H$ git branch test  # 创建一个分支 test, 但是没有进入test分支, 此时还在 master 分支上., T. \4 U% \8 _' d" q
$ vim xxxx         # 编辑 master 分支上的一个已有的文件$ Q$ `  B% `9 \) A& H8 T# W
$ git commit -am 'xxx message'  # 提交 master 分支的修改
0 O9 a/ Y: D8 b- a4 t$ git checkout test    # 切换到 test 分支
; J% v! n* j3 w, `5 C$ vim xxxx             # 编辑之前在 master 上编辑的文件, 可以编辑同一个地方, 造成冲突
' Y& y* R! w' o1 p1 ^" ?$ git commit -am 'xxx message'  # 提交 test 分支的修改& `9 C- O5 A$ h0 w9 X! n, ^
$ git checkout master           # 切换到 master 分支, j( |# n4 L2 ?7 w" j; P# p! Y6 K8 d
$ git merge test                # 将 test 分支合并到 master 分支, 由于上面编辑了同一文件, 这里会产生冲突
' A2 J0 [4 w3 U4 EAuto-merging xxxx" ?6 a7 T' Q6 A9 M
CONFLICT (content): Merge conflict in xxxx
" R) M8 W8 E: F5 I  \9 IAutomatic merge failed; fix conflicts and then commit the result.+ q1 E; L2 u0 g' @) T& u/ L
最后, 参照上一节中解决冲突的步骤, 用文本编辑器修改冲突文件.
/ t( O+ y" t# ~- ~6 x# P' G
' c( D! e5 P( b4 u通过 git 提取补丁
( F, }9 I$ c( c提取的补丁的方法有多种:1 z" j. `9 O$ o  Q+ Z
  O/ ^  V- w" w7 v: _
$ git format-patch -1     # 提取本次 commit 和上次 commit 之间的不同, 并生成patch文件7 s" ~/ b, B$ x
$ git format-patch -2     # 提取本次 commit 和 上上次 commit 之间的不同, 并生成patch文件( P6 S5 h$ q) |& D
$ git format-patch commit号1 commit号2  # 提取2次commit号之间的不同, 并生成patch文件 (commit号可以通过 git log 来查看)4 F( [: l# q' R" L
$ git format-patch tag1 tag2            # 提取2次tag之间的不同, 并生成patch文件 (tag可以通过 git tag 来查看)
; {7 T$ X6 J' ~" S通过 git 提取指定版本的源码
3 K1 J, A7 T) j( A8 N# e这个功能在部署的时候比较有用.
' A5 O8 j2 f! ^  m4 p" g& x7 |
4 P2 q# ?4 o. m2 [& u$ git archive --format=tar --prefix="tagxx/" tagxx > ../tagxx.tar  # 获取 tagxx 的源码, 加了 --prefix 的作用是在最终的 tagxx.tar 中加了一层文件夹 tagxx
0 G) y8 }( F. O3 _8 g上面的 tagxx 也可以是 commit号
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-24 04:05 , Processed in 0.156250 second(s), 23 queries , Gzip On.

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

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

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