Git 基本操作集合

常用客戶端:Gitkraken, Fork, Github 客戶端

(一) Git 命令

1. 初始化 Git

  1. 進入到自己想創建版本庫的目錄

  2. 輸入指令:

    git init
    

    的目錄,這個目錄就是Git用來跟蹤管理版本庫的。

3. 文件添加進遠程代碼庫

  1. git add <文件名> 將文件名為filename的文件添加進倉庫,可以多個文件名并列,用空格隔開
  2. 初次提交可以直接使用 git add . 將當前所有文件添加進倉庫
  3. git commit -m "describe it" 將文件提交到本地分支倉庫的操作,后面加的是日志。
  4. git add remote origin <遠程倉庫地址> 添加遠程倉庫地址
  5. git pull --rebase origin master 如果在遠程倉庫中創建了諸如 README.md 等文件,需要先進行這不操作,保證本地也同步到遠程的文件
  6. git push -u origin master將本地代碼推送到遠程代碼庫

4. 提交和更新代碼操作

  1. git add <文件名> 先把要更新的文件加入暫存區,,相應還有git add . (提交新文件和被修改文件,不包括被刪除文件)、 git add --all (提交所有變化) 和 git add -u(提交被修改和被刪除文件,不包括新文件)
  2. git commit -m "describe it" 提交到本地分支倉庫
  3. git push -u <分支名> 推送到遠程代碼倉庫
  4. git pull <遠程主機名> <遠程分支名>:<本地分支名> 更新代碼,如果有沖突需要在本地提交

5. 日常模式總結

  1. 首先,用git push origin branch-name推送自己的修改;
  2. 如果推送失敗,則因為遠程分支比你的本地更新,需要先用git pull試圖合并;
  3. 如果合并有沖突,則解決沖突,并在本地提交;
  4. 沒有沖突或者解決掉沖突后,再用git push origin branch-name 再次推送
  5. 如果git pull提示 “no tracking information”,則說明本地分支和遠程分支的鏈接關系沒有創建,用命令git branch --set-upstream branch-name origin/branch-name

6. 常用指令

  1. git status 可以隨時倉庫當前狀態,查看已經命令過但還未經提交到倉庫的所有操作,可以看成是待處理事項列表
  2. git diff 可以看到具體修改了哪些內容
  3. git log 查看對倉庫的操作記錄
  4. git rm <filename> 刪除文件,如果確認刪除,刪除后需要進行 git commit -m "describe it" 操作,保證本地分支同步;如果需要回復刪除文件需要用 git checkout --<filename> 操作,從分支倉庫中回復文件到暫存區
  5. git clone git@server-name:path/repo-name.git 從遠程代碼倉庫克隆代碼
  6. git branch 查看本地分支
  7. git branch -r 查看遠程分支
  8. git branch <本地分支名> 創建本地分支
  9. git checkout <本地分支名> 切換到相應本地分支
  10. git branch -d <本地分支名> 刪除分支
  11. git merge <本地分支名> 與當前分支進行合并
  12. git reset HEAD 取消緩存在暫存區的文件
  13. git tag 查看版本
  14. git tag <版本號> 創建新版本
  15. git tag -d <版本號> 刪除版本

(二) Git 基本概念

1. 版本回退: git reset

  • 每一次commit都是對應一個版本
  • commit id是對版本的具體標識
  • HEAD表示當前版本
  • HEAD^表示上一個版本
  • HEAD^^表示上上版本
  • HEAD~100表示前100個版本
  • git reset --hard commitId 回退到版本號為commitId的地方,也可以用HEAD的形式表示。
  • 穿梭前,用git log查看提交歷史,以便確定要回退到哪個版本。
  • 重返未來,用git reflog查看命令歷史,以便確定要回到未來的哪個版本。

2. 工作區和暫存區

  • 先上一張很經典的圖

    ?

    ?

    img

    ?

  • 工作區:就是我們在電腦中實際看到的;

  • 版本庫:工作區中的隱藏目錄.git,就是版本庫;

  • 暫存區:暫存區的概念很重要,理解暫存區之后對于Git的版本管理會有一個比較清晰的思路。

  • master: 這是Git為我們自動創建的第一個分支。

  • 我覺得如果把工作區看成是鍵盤終端輸入,版本庫中的master可以看成是電腦硬盤,我們輸入的內容首先是到緩存中的,并不是直接存入硬盤。當緩存區滿或者人為發送指令時才會將緩存區的內容寫入硬盤。

  • 以添加和文件修改為例,git add指令只是選中文件或者其他要提交的修改,將它們添加進暫存區。只有使用git commit指令的時候,才將暫存區的所有內容提交到當前分支。

    ?

(三) 分支管理

1. 分支需求描述

  • 不完整的改動可以先放到分支上,這樣別人看不到分支的內容,不會相互影響。可以直到開發完畢后,再一次性合并到原來的分支上.
  • 一開始的時候,master分支是一條線,Git用master指向最新的提交,再用HEAD指向master,就能確定當前分支,以及當前分支的提交點:
img

只有一條master時間線

2. 創建、合并和刪除分支

2.1 原理

  • 創建新的分支:

    當我們創建新的分支,例如dev時,Git新建了一個指針叫dev,指向master相同的提交,再把HEAD指向dev,就表示當前分支在dev上:

    ?

    ?

    img

    創建新的分支dev

  • Git創建一個分支很快,增加一個dev指針,改改HEAD的指向. 從現在開始,對工作區的修改和提交就是針對dev分支了,比如新提交一次后,dev指針往前移動一步,而master指針不變:

    ?

    ?

    img

    對工作區的修改和提交

  • 合并分支:

    把dev合并到master上, 最簡單的方法就是直接把master指向dev的當前提交,就完成了合并:

    ?

    ?

    img

    合并分支

  • 刪除分支:

    刪除dev分支就是把dev指針給刪掉,刪掉后就剩下了一條master分支:

    ?

    ?

    img

    刪除分支

2.2 實戰

  • take dev as an example
  • 創建分支: git branch dev
  • 切換到分支:git checkout dev
  • 創建+切換分支: git checkout -b dev
  • 查看當前分支:git branch
  • 切換到master分支:git checkout master
  • 合并指定分支到當前分支:git merge dev
  • 刪除分支:git branch -d dev
  • git log --graph命令可以看到分支合并圖。

3. 分支策略

在實際開發中,我們應該按照幾個基本原則進行分支管理:

  1. master分支應該是非常穩定的,也就是僅用來發布新版本,平時不能在上面干活;

  2. 干活都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,比如1.0版本發布時,再把dev分支合并到master上,在master分支發布1.0版本;

  3. 你和你的小伙伴們每個人都在dev分支上干活,每個人都有自己的分支,時不時地往dev分支上合并就可以了。
    4.所以,團隊合作的分支看起來就像這樣:

    ?

    ?

    img

    團隊合作分支

4. Bug分支

  • 修復bug時,我們會通過創建新的bug分支進行修復,然后合并,最后刪除;
  • 當工作沒有完成時,先把工作現場git stash一下,然后去修復bug.
  • 修復后,再git stash pop,回到工作現場。
  • 要丟棄一個沒有被合并過的分支,可以通過git branch -D <name>強行刪除。

5. 多人協作

5.1 基本命令

  • 當從遠程倉庫克隆時,實際上Git自動把本地的master分支和遠程的master分支對應起來了,并且,遠程倉庫的默認名稱是origin。

  • 要查看遠程庫的信息,用git remote

  • 顯示更詳細的信息, 用git remote -v

  • 推送分支: 就是把該分支上的所有本地提交推送到遠程庫。推送時,要指定本地分支,這樣,Git就會把該分支推送到遠程庫對應的遠程分支上:

    git push origin master  
    git push origin dev
    
    
  • 并不是一定要把本地分支往遠程推送,master分支是主分支,因此要時刻與遠程同步, 其他視情況而定.

  • git pull 抓取遠程的新提交.

  • 在本地創建和遠程分支對應的分支,使用git checkout -b branch-name origin/branch-name,本地和遠程分支的名稱最好一致;

  • 建立本地分支和遠程分支的關聯,使用git branch --set-upstream branch-name origin/branch-name

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,578評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,701評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,691評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,974評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,694評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,026評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,015評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,193評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,719評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,442評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,668評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,151評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,846評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,255評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,592評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,394評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容

  • 前言: 隨著app不斷的迭代,代碼會變得越來越多,經過N個人的持續N年的代碼,維護起來越來越難,也很難保證測試ca...
    Evans_Xiao閱讀 2,857評論 0 4
  • 不通音律,也可以很好的欣賞。 不知又是何人在譜曲作詞。 羅大佑,林夕,梅艷芳,邁克爾搖滾…… 流行,古典,舞曲,樂...
    雪憶0331閱讀 141評論 0 0
  • 朱筍筍閱讀 199評論 1 1