Git 新手倒騰(一)

全部的版本控制系統,其實只能跟蹤文本文件的改動,好比TXT文件,網頁,全部的程序代碼等等,Git也不例外。版本控制系統能夠告訴你每次的改動,好比在第5行加了一個單詞「Linux」,在第8行刪了一個單詞「Windows」。而圖片、視頻這些二進制文件,雖然也能由版本控制系統管理,但無法跟蹤文件的變化,只能把二進制文件每次改動串起來,也就是隻知道圖片從100KB改爲了120KB,但到底改了啥,版本控制系統不知道,也無法知道。php

工做區和版本庫

工做區就是電腦中實際能看到的文件夾,好比labshare文件夾
labshare文件夾
圖片中顯示有個.git隱藏目錄,它是Git的版本庫。git

Git的版本庫裏存了不少東西,其中最重要的就是稱爲stage(或者叫index)的暫存區,還有Git爲咱們自動建立的第一個分支master,以及指向master的一個指針叫HEADssh

聊雪峯的git教程中的圖片
每次進行git add操做時,將文件放入stage暫存,git commit後將文件放入當前分支url

初始化版本庫

1.初始化一個Git倉庫,使用git init命令。
2.添加文件到Git倉庫,分兩步:spa

  • 使用命令git add ,注意,可反覆屢次使用,添加多個文件;
  • 列表項目使用命令git commit -m "註釋"

基礎命令

git status命令可讓咱們時刻掌握倉庫當前的狀態。命令行


git diff進行查看相比較上個狀態進行了哪些更改,如:版本控制

git diff hello.php

git log進行查看git日誌,若是一次顯示太多,可選參數爲--pretty=oneline
如使用git log命令後,有多塊記錄,每塊有四行指針

commint:123jkh123jkh12kjne12j3 //一串數字
author:XXX
Date:XXXX-XX-XX
XXXX  //這行爲git commit -m "XXXX"

--graph顯示分支合併圖
--abbrev-commit日誌


git rm進行文件刪除,而後git commit -m "XXX",若是rm誤刪工做區文件,還沒進行commit可以使用git checkou --filename從版本庫中恢復出來code


git clone url進行從遠程庫克隆,可選擇httpssshssh速度優於https


如去切換至其餘分區或進行其餘工做,git stash用於將手頭工做暫時保存,git stash pop回到工做現場

版本回退或重返將來

HEAD表示當前版本,上一個版本是HEAD^,多個版本以前可以使用HEAD^n(n爲數字)
具體命令爲:git reset --hard HEAD^,去上一個版本
若是後悔了想回將來,前提命令行窗口未關閉,可git log查看commit後的一串,寫前幾位就行能進行惟一表示,如

git reset --hard absd11

更糟糕的狀況是你進行版本回退後次日又想重返將來,git log查詢不到須要版本的coomit了,這時請使用git reflog,樣子多是這樣的

as12312 HEAD@{0}: commit : XXXXX
asdvcad HEAD@{1}: commit : XXXXX
a1deff1 HEAD@{2}: commit : XXXXX

最開始的數字就能夠進行 git reset --hard as12312 ,進行穿梭

撤消修改

1.當你改亂了工做區某個文件的內容,想直接丟棄工做區的修改時,用命令git checkout --filename
2.當你不但改亂了工做區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD filename,暫存區的修改回退到工做區,工做區的丟棄可按照1
3.若是提交不適內容至版本庫,請進行版本回退

分支管理

git checkout -b name,建立並切換到指定分區,至關於結合命令

git branch name //建立分支
git checkout name //切換分支

使用git branch查看當前分區,當前分區前有*標識
git merge name用於合併指定分支到當前分支
git branch -d name刪除分支

分支合併時產生衝突應解決衝突再提交去工做區文件查看,標識爲<<<<<<<=======>>>>>>>標記出不一樣分支的內容將衝突修復後再提交

git通常使用fast forward模式進行分支合併,很差的地方是刪除分支後悔丟掉分支信息,因此模式可調爲--no-ff禁用fast forward,在合併時會生成一個新的commit,所以可加描述進去

git merge --no-ff -m "no ff" dev //將dev分支合併至當前分支

分支策略

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

首先,master
分支應該是很是穩定的,也就是僅用來發布新版本,平時不能在上面幹活;

那在哪幹活呢?幹活都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,好比1.0版本發佈時,再把dev分支合併到master上,在master分支發佈1.0版本;

你和你的小夥伴們每一個人都在dev分支上幹活,每一個人都有本身的分支,時不時地往dev分支上合併就能夠了。

因此,團隊合做的分支看起來就像這樣:
分支管理圖
master是主分支,需時刻與遠程同步
dev全部團隊開發工做在上面,時刻與遠程同步

多人協做

抓取分支
1.git clone url,克隆遠程庫,這時只能看到master分支
2.建立遠程的dev到本地

git checkout -b dev origin/dev

基本流程

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。

這裏不少流程和思想參考廖雪峯的Git教程,不勝感激前人無私分享。
地址:Git教程--廖雪峯

相關文章
相關標籤/搜索