Git 基本操作集合

常用客戶端:Gitkraken次绘, Fork扮饶, Github 客戶端

(一) Git 命令

1. 初始化 Git

  1. 進(jìn)入到自己想創(chuàng)建版本庫(kù)的目錄

  2. 輸入指令:

    git init
    

    的目錄,這個(gè)目錄就是Git用來(lái)跟蹤管理版本庫(kù)的乏冀。

3. 文件添加進(jìn)遠(yuǎn)程代碼庫(kù)

  1. git add <文件名> 將文件名為filename的文件添加進(jìn)倉(cāng)庫(kù)妥衣,可以多個(gè)文件名并列赘阀,用空格隔開
  2. 初次提交可以直接使用 git add . 將當(dāng)前所有文件添加進(jìn)倉(cāng)庫(kù)
  3. git commit -m "describe it" 將文件提交到本地分支倉(cāng)庫(kù)的操作万细,后面加的是日志扑眉。
  4. git add remote origin <遠(yuǎn)程倉(cāng)庫(kù)地址> 添加遠(yuǎn)程倉(cāng)庫(kù)地址
  5. git pull --rebase origin master 如果在遠(yuǎn)程倉(cāng)庫(kù)中創(chuàng)建了諸如 README.md 等文件,需要先進(jìn)行這不操作赖钞,保證本地也同步到遠(yuǎn)程的文件
  6. git push -u origin master將本地代碼推送到遠(yuǎn)程代碼庫(kù)

4. 提交和更新代碼操作

  1. git add <文件名> 先把要更新的文件加入暫存區(qū)腰素,,相應(yīng)還有git add . (提交新文件和被修改文件雪营,不包括被刪除文件)弓千、 git add --all (提交所有變化) 和 git add -u(提交被修改和被刪除文件,不包括新文件)
  2. git commit -m "describe it" 提交到本地分支倉(cāng)庫(kù)
  3. git push -u <分支名> 推送到遠(yuǎn)程代碼倉(cāng)庫(kù)
  4. git pull <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>:<本地分支名> 更新代碼献起,如果有沖突需要在本地提交

5. 日常模式總結(jié)

  1. 首先计呈,用git push origin branch-name推送自己的修改砰诵;
  2. 如果推送失敗,則因?yàn)檫h(yuǎn)程分支比你的本地更新捌显,需要先用git pull試圖合并;
  3. 如果合并有沖突总寒,則解決沖突扶歪,并在本地提交;
  4. 沒(méi)有沖突或者解決掉沖突后摄闸,再用git push origin branch-name 再次推送
  5. 如果git pull提示 “no tracking information”善镰,則說(shuō)明本地分支和遠(yuǎn)程分支的鏈接關(guān)系沒(méi)有創(chuàng)建,用命令git branch --set-upstream branch-name origin/branch-name年枕。

6. 常用指令

  1. git status 可以隨時(shí)倉(cāng)庫(kù)當(dāng)前狀態(tài)炫欺,查看已經(jīng)命令過(guò)但還未經(jīng)提交到倉(cāng)庫(kù)的所有操作,可以看成是待處理事項(xiàng)列表
  2. git diff 可以看到具體修改了哪些內(nèi)容
  3. git log 查看對(duì)倉(cāng)庫(kù)的操作記錄
  4. git rm <filename> 刪除文件熏兄,如果確認(rèn)刪除品洛,刪除后需要進(jìn)行 git commit -m "describe it" 操作,保證本地分支同步摩桶;如果需要回復(fù)刪除文件需要用 git checkout --<filename> 操作桥状,從分支倉(cāng)庫(kù)中回復(fù)文件到暫存區(qū)
  5. git clone git@server-name:path/repo-name.git 從遠(yuǎn)程代碼倉(cāng)庫(kù)克隆代碼
  6. git branch 查看本地分支
  7. git branch -r 查看遠(yuǎn)程分支
  8. git branch <本地分支名> 創(chuàng)建本地分支
  9. git checkout <本地分支名> 切換到相應(yīng)本地分支
  10. git branch -d <本地分支名> 刪除分支
  11. git merge <本地分支名> 與當(dāng)前分支進(jìn)行合并
  12. git reset HEAD 取消緩存在暫存區(qū)的文件
  13. git tag 查看版本
  14. git tag <版本號(hào)> 創(chuàng)建新版本
  15. git tag -d <版本號(hào)> 刪除版本

(二) Git 基本概念

1. 版本回退: git reset

  • 每一次commit都是對(duì)應(yīng)一個(gè)版本
  • commit id是對(duì)版本的具體標(biāo)識(shí)
  • HEAD表示當(dāng)前版本
  • HEAD^表示上一個(gè)版本
  • HEAD^^表示上上版本
  • HEAD~100表示前100個(gè)版本
  • git reset --hard commitId 回退到版本號(hào)為commitId的地方,也可以用HEAD的形式表示硝清。
  • 穿梭前辅斟,用git log查看提交歷史,以便確定要回退到哪個(gè)版本芦拿。
  • 重返未來(lái)士飒,用git reflog查看命令歷史,以便確定要回到未來(lái)的哪個(gè)版本蔗崎。

2. 工作區(qū)和暫存區(qū)

  • 先上一張很經(jīng)典的圖

    ?

    ?

    img

    ?

  • 工作區(qū):就是我們?cè)陔娔X中實(shí)際看到的酵幕;

  • 版本庫(kù):工作區(qū)中的隱藏目錄.git,就是版本庫(kù)蚁趁;

  • 暫存區(qū):暫存區(qū)的概念很重要裙盾,理解暫存區(qū)之后對(duì)于Git的版本管理會(huì)有一個(gè)比較清晰的思路。

  • master: 這是Git為我們自動(dòng)創(chuàng)建的第一個(gè)分支他嫡。

  • 我覺(jué)得如果把工作區(qū)看成是鍵盤終端輸入番官,版本庫(kù)中的master可以看成是電腦硬盤,我們輸入的內(nèi)容首先是到緩存中的钢属,并不是直接存入硬盤徘熔。當(dāng)緩存區(qū)滿或者人為發(fā)送指令時(shí)才會(huì)將緩存區(qū)的內(nèi)容寫入硬盤。

  • 以添加和文件修改為例淆党,git add指令只是選中文件或者其他要提交的修改酷师,將它們添加進(jìn)暫存區(qū)讶凉。只有使用git commit指令的時(shí)候,才將暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支山孔。

    ?

(三) 分支管理

1. 分支需求描述

  • 不完整的改動(dòng)可以先放到分支上懂讯,這樣別人看不到分支的內(nèi)容,不會(huì)相互影響台颠『滞可以直到開發(fā)完畢后,再一次性合并到原來(lái)的分支上.
  • 一開始的時(shí)候串前,master分支是一條線瘫里,Git用master指向最新的提交,再用HEAD指向master荡碾,就能確定當(dāng)前分支谨读,以及當(dāng)前分支的提交點(diǎn):
img

只有一條master時(shí)間線

2. 創(chuàng)建、合并和刪除分支

2.1 原理

  • 創(chuàng)建新的分支:

    當(dāng)我們創(chuàng)建新的分支坛吁,例如dev時(shí)劳殖,Git新建了一個(gè)指針叫dev,指向master相同的提交阶冈,再把HEAD指向dev闷尿,就表示當(dāng)前分支在dev上:

    ?

    ?

    img

    創(chuàng)建新的分支dev

  • Git創(chuàng)建一個(gè)分支很快,增加一個(gè)dev指針女坑,改改HEAD的指向. 從現(xiàn)在開始填具,對(duì)工作區(qū)的修改和提交就是針對(duì)dev分支了,比如新提交一次后匆骗,dev指針往前移動(dòng)一步劳景,而master指針不變:

    ?

    ?

    img

    對(duì)工作區(qū)的修改和提交

  • 合并分支:

    把dev合并到master上, 最簡(jiǎn)單的方法就是直接把master指向dev的當(dāng)前提交,就完成了合并:

    ?

    ?

    img

    合并分支

  • 刪除分支:

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

    ?

    ?

    img

    刪除分支

2.2 實(shí)戰(zhàn)

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

3. 分支策略

在實(shí)際開發(fā)中,我們應(yīng)該按照幾個(gè)基本原則進(jìn)行分支管理:

  1. master分支應(yīng)該是非常穩(wěn)定的瓮钥,也就是僅用來(lái)發(fā)布新版本筋量,平時(shí)不能在上面干活;

  2. 干活都在dev分支上碉熄,也就是說(shuō)桨武,dev分支是不穩(wěn)定的,到某個(gè)時(shí)候锈津,比如1.0版本發(fā)布時(shí)呀酸,再把dev分支合并到master上,在master分支發(fā)布1.0版本琼梆;

  3. 你和你的小伙伴們每個(gè)人都在dev分支上干活性誉,每個(gè)人都有自己的分支窿吩,時(shí)不時(shí)地往dev分支上合并就可以了。
    4.所以错览,團(tuán)隊(duì)合作的分支看起來(lái)就像這樣:

    ?

    ?

    img

    團(tuán)隊(duì)合作分支

4. Bug分支

  • 修復(fù)bug時(shí)纫雁,我們會(huì)通過(guò)創(chuàng)建新的bug分支進(jìn)行修復(fù),然后合并倾哺,最后刪除先较;
  • 當(dāng)工作沒(méi)有完成時(shí),先把工作現(xiàn)場(chǎng)git stash一下悼粮,然后去修復(fù)bug.
  • 修復(fù)后,再git stash pop曾棕,回到工作現(xiàn)場(chǎng)扣猫。
  • 要丟棄一個(gè)沒(méi)有被合并過(guò)的分支,可以通過(guò)git branch -D <name>強(qiáng)行刪除翘地。

5. 多人協(xié)作

5.1 基本命令

  • 當(dāng)從遠(yuǎn)程倉(cāng)庫(kù)克隆時(shí)申尤,實(shí)際上Git自動(dòng)把本地的master分支和遠(yuǎn)程的master分支對(duì)應(yīng)起來(lái)了,并且衙耕,遠(yuǎn)程倉(cāng)庫(kù)的默認(rèn)名稱是origin昧穿。

  • 要查看遠(yuǎn)程庫(kù)的信息,用git remote

  • 顯示更詳細(xì)的信息, 用git remote -v

  • 推送分支: 就是把該分支上的所有本地提交推送到遠(yuǎn)程庫(kù)橙喘。推送時(shí)时鸵,要指定本地分支,這樣型凳,Git就會(huì)把該分支推送到遠(yuǎn)程庫(kù)對(duì)應(yīng)的遠(yuǎn)程分支上:

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

  • git pull 抓取遠(yuǎn)程的新提交.

  • 在本地創(chuàng)建和遠(yuǎn)程分支對(duì)應(yīng)的分支别威,使用git checkout -b branch-name origin/branch-name,本地和遠(yuǎn)程分支的名稱最好一致彭雾;

  • 建立本地分支和遠(yuǎn)程分支的關(guān)聯(lián),使用git branch --set-upstream branch-name origin/branch-name锁保;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末薯酝,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子爽柒,更是在濱河造成了極大的恐慌吴菠,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件霉赡,死亡現(xiàn)場(chǎng)離奇詭異橄务,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)穴亏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門蜂挪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)重挑,“玉大人,你說(shuō)我怎么就攤上這事棠涮∶В” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵严肪,是天一觀的道長(zhǎng)史煎。 經(jīng)常有香客問(wèn)我,道長(zhǎng)驳糯,這世上最難降的妖魔是什么篇梭? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮酝枢,結(jié)果婚禮上恬偷,老公的妹妹穿的比我還像新娘。我一直安慰自己帘睦,他們只是感情好袍患,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著竣付,像睡著了一般诡延。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上古胆,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天肆良,我揣著相機(jī)與錄音,去河邊找鬼赤兴。 笑死妖滔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的桶良。 我是一名探鬼主播座舍,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼陨帆!你這毒婦竟也來(lái)了曲秉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤疲牵,失蹤者是張志新(化名)和其女友劉穎承二,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纲爸,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡亥鸠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片负蚊。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡神妹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出家妆,到底是詐尸還是另有隱情鸵荠,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布伤极,位于F島的核電站蛹找,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏哨坪。R本人自食惡果不足惜庸疾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望当编。 院中可真熱鬧彼硫,春花似錦、人聲如沸凌箕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)牵舱。三九已至,卻和暖如春缺虐,著一層夾襖步出監(jiān)牢的瞬間芜壁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工高氮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留慧妄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓剪芍,卻偏偏與公主長(zhǎng)得像塞淹,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子罪裹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • 前言: 隨著app不斷的迭代饱普,代碼會(huì)變得越來(lái)越多,經(jīng)過(guò)N個(gè)人的持續(xù)N年的代碼状共,維護(hù)起來(lái)越來(lái)越難套耕,也很難保證測(cè)試ca...
    Evans_Xiao閱讀 2,819評(píng)論 0 4
  • 不通音律,也可以很好的欣賞峡继。 不知又是何人在譜曲作詞冯袍。 羅大佑,林夕,梅艷芳康愤,邁克爾搖滾…… 流行儡循,古典,舞曲翘瓮,樂(lè)...
    雪憶0331閱讀 125評(píng)論 0 0
  • 朱筍筍閱讀 191評(píng)論 1 1