日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Git 命令行操作

發布時間:2024/8/24 34 生活家
生活随笔 收集整理的這篇文章主要介紹了 Git 命令行操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

全文結構:


1)倉庫概念

首先從總體上看,git的存儲、操作:

主要涉及到四個關鍵點:

工作區(workspace):本地電腦存放項目文件的地方,比如learnGitProject文件夾;
暫存區(Index/Stage):在使用git管理項目文件的時候,其本地的項目文件會多出一個.git的文件夾,將這個.git文件夾稱之為版本庫。其中.git文件夾中包含了兩個部分,一個是暫存區(Index或者Stage),顧名思義就是暫時存放文件的地方,通常使用add命令將工作區的文件添加到暫存區里;
本地倉庫(Repository):.git文件夾里還包括git自動創建的master分支,并且將HEAD指針指向master分支。使用commit命令可以將暫存區中的文件添加到本地倉庫中;
遠程倉庫(Remote):不是在本地倉庫中,項目代碼在遠程git服務器上,比如項目放在github上,就是一個遠程倉庫,通常使用clone命令將遠程倉庫拷貝到本地倉庫中,開發后推送到遠程倉庫中即可;


2)分支概念

1)分支介紹:

develop分支(唯一):用于平時開發的主分支,并一直存在,永遠是功能最新最全的分支。

feature分支(N個):用于開發新的功能的分支,一般是多個員工一人一個feature遠程分支。
release分支:用于發布準備的專門分支。

master分支(唯一):最為穩定、隨時可發布的代碼;所有在 master 上的提交都必要要有 tag ,方便回滾。

hotfix分支:用于修復線上代碼的 bug

2)分支關系:

develop和master是2個主要分支,這兩個都是唯一的

其他的3種分支都是從這2個分支派生出來的:

  feature從develop拉出,并回到develop

  release從develop拉出,并推送到develop+master兩個分支(保證同步)

  hotfix從master拉出,并推送到develop+master兩個分支(保證同步)

3)特性總結:

生命周期:

  feature和hotfix是臨時的

  其他3個都是長期存在

直接開發:

  從不:master、release

  不建議:develop

  直接:feature、hotfix(和臨時對應)


一、基礎流程

首次需:

0. git init初始化新倉庫(init 好像沒啥用)

1. 到代碼文件夾,右擊 Git Bash Here,打開到本文件路徑

2.git clone + GitHub網頁上Repository復制下來的URL

3. 此時是遠程分支是origin/master(origin層次下的master分支);本地分支是默認的master;需要切換遠程分支和本地分支:

  git checkout-b jqy-local-dev(本地分支名)origin/dev(遠程分支名)

(如果沒有這一步的操作,就會從master拉取,因為SSH的url只有一個)

3.1先用 git branch -a 查看所有本地+遠程分支

3.2 切換分支

  注意上圖中本地分支已經切換,origin/dev是根據需要選擇的遠程分支,遠程分支改變后,本地文件會由origin/master這個遠程分支變為你選擇的遠程分支

(ps: 將本地分支和遠程分支關聯的操作一般只用于拉取的時候,而后面就不用管這個關聯了,因為git push origin jqy 這個指令一般不用,都不會原路推到代碼來源如dev遠程分支,而是push到自己的遠程分支,然后MR等待評審再合并到需要的分支)

后續:

不斷編碼修改...

4. cd到新文件夾中,Git Bash

5.git add . (注意" . "不能省略,此操作是把文件夾下面新的文件或修改過的文件添加進來,如果有的文件之前已經添加了,它會自動省略)

6.git commit -m "提交信息"(提交的信息是你的項目說明)

7.(配置好用戶名、郵箱)

8.git push origin master

git push [remote-name] [branch-name]

(此操作目的是把本地倉庫push到github上面,此步驟需要你輸入登錄github上的帳號和密碼)

(一般團隊開發都用 git push origin jqy:jqy001這樣推到自己的遠程分支,然后提交MR;而不是直接push就完事)

git push originjqy:jqy001本地分支提交到遠程分支

(9.) 如果push的時候顯示沖突(有人改了對應的遠程分支),就先pull一下:

git pull origin jqy001

對比沖突,解決后再push

10.然后在網頁中Submit MR,比如從jqy001==>dev

等待代碼審核即可...

二、分支管理

git branch查看本地分支

git branch -a查看所有分支(包括遠程

上方是本地分支區,下方origin一堆是遠程分支;箭頭指向的是當前本地分支、遠程分支


git checkout -b[branchname] 創建+切換 分支

git branch dev 創建分支(這個一般用不上)
git checkout dev 切換分支(此處的dev可以為git reflog的七位數字)

git branch -d[local-branch-name] 刪除分支(本地)

git branch -r -d[remote-branch-name] 刪除(遠程remote)分支


修復上一個版本的bug:

1. git log找到bug版本的版本號

2.git branch 1db3731將HEAD移動到bug版本

3.git branch -b myfixbug然后開始在此分支修改bug

4.等到master里面到下一個版本上線之前,合并myfixbug

最好看著IDEA中的版本線狀圖===》》》

順便學習Github/CodeHub團隊開發策略(分支策略)總結下來


git push origin master //push到origin的master分支
git push origin dev //push到origin的dev分支


git remote -v查看連接SSH的url (遠程庫的默認名稱是origin


git branch -v

git branch -vv

顯示local分支對應的遠程分支


設置origin:

三、團隊開發 - MR提交

在團隊合作軟件開發方面,一般有master分支和develop分支,

開發者先發送merge request請求到develop上,然后通過 項目管理者review之后,才會merge到master分支上。


Merge Request

(建議在IDEA里面進行,因為方便對照修改的內容):

git branch -b jqy 建自己的本地分支

git add 需要修改的文件(最好不要用git add . 因為這樣會add上一些無用的東西)

git commit (提交到自己的本地)

git pull origin jqy001 (與origin中jqy001這個遠程分支進行對比,修復沖突,并提交需要上線的文件)

git push originjqy:jqy001 本地分支提交到遠程分支

成功的話,然后在網頁中Submit MR

(然后就會由管理員審核MR并提交UAT測試環境。。)


Merge Request(這種方法一般在push的時候會被卡主)

1)git checkout -b xxx(xxx是新建分支的名字,如feature_i)

2) git add . git commit -m "..." git push originxxx //在自己的xxx分支的操作

3.1)git checkout master git mergexxx git push originmaster//切換到master進行合并【命令行版】

3.2) (一定確保第2步有git push originxxx)然后在gitlab界面進行merge request的信息填寫 【GUI版,適用于代碼審核】

四、解決沖突

git mergedev // 一般將dev分支的修改merge到master分支上

merge的時候,如果有同時修改的內容, 就發生沖突(此時無法自動merge),需要查看conflict然后手動合并。


一開始兩個不同的分支同時修改master的readme文件:

第一個merge的不會出問題,

第二個merge時候:

git mergefeature_1之后,查看feature_1的文件,會顯示比對信息:

手動修改readme文件(不用切換到feature_1分支),

然后在master分支上面,add+commit

然后直接 git push origin master就好了(可以在gitlab 網頁GUI上面直接看一下驗證):


【另一種方式push】

第二個push出現沖突時:

然后git pull

修改、git add、git commit

然后再push就好

五、回退版本(時光穿梭機)

git status 查看工作目錄、暫存區的狀態

git diff 查看修改內容(Git跟蹤并管理的是文件的修改,而非文件本身)

  git diff 詳細命令: https://www.jianshu.com/p/80542dc3164e

git log查看日志(一次次commit修改情況,注意是以commit為粒度)

   (git log-p 可看到具體修改內容。按Enter向下閱讀)


1)已經commit之后

git reset --hardHEAD~1 回退1個提交(徹底回退,沖掉回退的信息)
git reset --softHEAD~1 回退1個提交+保留代碼修改信息

git reset --hardd311cd2 ==》先用git reflog查看各個版本的 commit id(如d311cd2)進行自由回退 (很好用!)

2)已經add,但沒有commit(錯誤還在 stage暫存區)

兩步操作:

git reset HEAD [filename]

git checkout -- [filename]

3)還沒有add(錯誤還在 工作區)

只需要一步:

git checkout -- [filename]

(這樣操作的粒度比較小;reset的話,粒度比較大;因為一般是一次commit是一到多次add的總和)


分析下粒度:

多次add,一次commit;

多次commit,一次push;

所以:

commit后的reset --hard 序號《==》1~n次的commit的粒度

add后的reset HEAD《==》回退到上次commit后的狀態,相當于1~n次的add的粒度

add前的 checkout -- [filename] 《==》回退到上次add后的狀態,相當于1次add內的粒度


詳細說明git reset:

git reset --hard HEAD^ 硬回退一步

(此時本地回退了,但是遠程沒有回退;如果需要遠程也回退,就要git push origin xxx再提交一下)

git reflog查看各個版本的 commit id(如d311cd2)

git reset --hardd311cd2根據后面的commit -m "..."信息,找到對應的id,進行自由回退 (很好用!)

六、忽略文件.gitignore

1)規則

/   //表示目錄

*  //匹配 任意個字符

?  //匹配 一個字符

[ ]  // 正則匹配 一個字符

!  //表示忽略匹配

2)示例

# 此為注釋 – 將被 Git 忽略

*.log    #表示所有的 .log文件(也包括子目錄里的)
*.iml    *.ipr    *.iws
*.txt       # 忽略所有 .txt 結尾的文件
!Readme.txt    # 但 Readme.txt 除外

/TODO     # 僅僅忽略項目根目錄下的 TODO 文件,不包括 subdir/TODO
/node_modules

hello[0-9].txt
.settings/   # 忽略settings文件里的全部
.idea/   .vscode/   target/   .gradle   /config
build/    # 忽略 build/ 目錄下的所有文件
doc/*.txt    # 會忽略 doc/notes.txt 但不包括 doc/server/arch.txt

/fd1/*    #忽略根目錄下的 /fd1/ 目錄的全部內容;
fd1/*    #忽略目錄 fd1 下的全部內容;注意,不管是根目錄下的 /fd1/ 目錄,還是某個子目錄 /child/fd1/ 目錄,都會被忽略;


  想把某些目錄或文件加入忽略規則,按照上述方法定義后發現并未生效,原因是.gitignore只能忽略那些原來沒有被track的文件,如果某些文件已經被納入了版本管理中,則修改.gitignore是無效的。那么解決方法就是先把本地緩存刪除(改變成未track狀態),然后再提交:

gitrm-r--cached.
gitadd.
gitcommit-m'update.gitignore'


PS:理解CRLF / LF

CRLF回車換行
Windows換行方式  CRLF==carriage return line feed
LF換行
Linux&Unix換行方式  LF== line feed

  本來在自己的 Ubuntu 系統上跑的很好,覺得沒bug就提交了。然而,同事使用的是Windows系統,他編譯之后怎么跑都不正常。
在Windows系統上換行符是CRLF,
兩個字符,只刪除
是不夠的。所以在讀取文件的時候一定要小心跨平臺。


Git 提供了一個名為core.autocrlf的配置,可以自動完成標準化與轉換。它的設置方式如下:

git config --global core.autocrlf  [true | input | false]  # 全局設置
git config --local core.autocrlf  [true | input | false] # 針對本項目設置

true:CRLF <=> LF
input:CRLF => LF
false:不變


注意:

CRLF 與 LF 混合的文本文件不受此配置控制。
Git 安裝后默認為 false


使用 Windows 系統的開發者設置:

git config --global core.autocrlf true

使用 Linux/MacOS 的開發者設置:

git config --global core.autocrlf input

ps:IDEA界面化Git操作

更多內容參見:《Git -- IDEA界面操作》

命令行操作是git的根基,在此基礎上的 IDEA界面操作,功能更加可視化、易于理解。


參考 git使用教程(有詳細實例):https://zhuanlan.zhihu.com/p/30044692

   git基本操作(精簡手冊):https://juejin.im/post/6844903598522908686

  廖雪峰git:https://www.liaoxuefeng.com/wiki/896043488029600

最后去練習吧:https://learngitbranching.js.org/?locale=zh_CN

總結

以上是生活随笔為你收集整理的Git 命令行操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。