Git使用說明
git官網:https://git-scm.com/
GitHub:https://github.com/
碼雲:https://gitee.com/
子產品主要分為:基礎,常用操作,分支、回退、常見錯誤。
一:基礎
1.Git 和 SVN的主要差別
- Git是分布式管理,SVN是集中式管理,
- Git支援離線操作,SVN僅支援聯網操作
2.Git的基本操作
為了更好的描述和傳達,閱讀前需要進行一些概念的統一
- repository(倉庫):git中有兩種repository,一個是remote(線上),還有一個是local(本地)。都是存儲project的所有的内容。
- branch(分支):一個project的鏡像。

3.初次使用:
//一個完整的步驟如下:
step1:初始化賬号姓名
git config --global user.name "XXX"
git config --global user.email [email protected]
git config --list //檢視配置資訊
step2:上傳檔案
cd /d/workspace //選擇目錄,進入到d盤workspace下面
git init //初始化操作,會在/d/workspace目錄下,生成.git檔案夾
git remote add origin url //搭橋,與遠端伺服器建立連接配接
git pull origin master //從遠端master分支pull代碼
git add test.txt //添加檔案
git commit -m "第一次送出" //commit時候的提示資訊
git push origin master:master //把暫存區的變換送出到服務端的master分支
step3:同步
git pull origin master //從遠端的master分支同步資料
//用于取回遠端主機某個分支的更新,再與本地的指定分支合并,類似于svn的update操作
二:常用操作
1.push操作:
git push origin 本地分支名 //把本地分支(本地checkout的分支)push到遠端同名分支,如果遠端分支沒有就建立同名分支; //與我目前在那個分支沒有關系
git push origin 本地分支名:遠端分支名 //将指定本地分支push到遠端分支; //與我目前在那個分支沒有關系
eg:把本地分支test送出到遠端倉庫master
git push origin test:master //與此時在哪個分支沒有關系,可以是目前的分支,也可是别的的分支。
push操作可能不成功,此時可以強制push:
原因:可能是因為遠端、本地的檔案不比對導緻的,強制push會覆寫遠端的檔案
git push -f origin master //強制push到遠端 參數-f:表示強制推送到遠端。
2.pull操作
git pull origin 遠端分支名 //把遠端分支pull到目前分支(本地checkout的分支)
git pull origin 遠端分支名:本地分支名 //把遠端分支pull到指定本地分支
補充:
指定了本地分支名,則将遠端分支的資料同步到制定的本地分支;若沒有指定則是同步到目前分支。如果指定的是不存在的分支,則會建立該分支。
git fetch和git pull的差別:
git fetch:從遠端擷取最新版本到本地,不會自動merge
git pull:從遠端擷取最新版本并merge到本地,pull=fetch+merge
注:本地看不到遠端的分支,使用git fetch,則可以看到了。
3. 遠端倉庫
git remote -v //檢視遠端分支的倉庫
git remote rm origin //删除遠端倉庫
git remote add origin url //添加遠端倉庫
4. 撤銷add的到緩存區的檔案
git clean -f //清除沒add的檔案、檔案夾
git rm --cached fileName:撤銷add到緩存區中的檔案
如需撤銷檔案夾加上-r:git rm -r --cached fileName
git diff 檔案名:檢視修改了那些内容
git checkout 檔案名:強制回退到修改之前的内容
5.狀态查詢:git status
6.檢視日志:
git log //預設檢視目前分支的日志資訊; 會按送出時間列出所有的更新,最近的更新排在最上面
git log -3 //檢視最近3次的送出日志資訊
git log bug_188 -3 //檢視具體某一個分支的日志資訊
git log --pretty=oneline -3 //顯示最近3條日志,并按行資訊日志資訊
7.修改内容對比:
git diff 檔案名:檢視修改了那些内容
git比較兩個檔案,修改與本地比較,檢視檔案修改了哪些内容
git diff branch1 branch2 --stat
顯示出所有有差異的檔案清單
git diff branch1 branch2 檔案名(帶路徑)
顯示指定檔案的詳細差異
git diff branch1 branch2
顯示出所有有差異的檔案的詳細差異
8.commit送出資訊
檢視commit的id 對應修改了哪些檔案:git show commit的id --stat
檢視某次commit修改的内容: git show commit的id
修改commit的送出資訊
(1)修改最後一個commit的資訊:
git commit --amend
如果提示編輯器不存在設定全局配置git的編輯器
git config --global core.editor vim
在彈出的編輯框中進行修改,之後儲存退出
(2)修改之前commit的資訊:
git rebase --interactive commit的id
該指令會列出目前commit的id之後送出的commit資訊清單
彈出編輯頁面,把commit的id前的 pick 改成 r 儲存,會彈出修改commit資訊的頁面
9.檢視标簽
git tag -l
三:分支
1.本地分支:
git branch local_branch : 建立本地分支
git branch -d local_branch:删除本地分支 //使用大寫的D 強制删除 git branch -D XXX
git branch -m old_branch new_branch:重命名本地分支
2.遠端分支:
git push origin dev:dev:建立遠端分支。//将本地分支push到遠端分支,如果遠端分支不存在,則建立遠端分支
git push origin --delete <branchName> 删除遠端分支
删除與遠端分支的關系: git remote rm origin //删除遠端倉庫,之後可以重新git remote add origin url,重建立立遠端關系
3.檢視分支:
git branch -a:檢視遠端和本地的分支,綠色代表的是目前的(本地)分支
git branch:檢視本地的分支,目前分支前面會标一個*号。
git branch -r:檢視遠端的分支
git remote show origin 檢視遠端分支
4.git checkout指令:
檢出,是我們最常用的指令。最常見的場景:建立分支,切換分支。
git checkout test:從目前分支切"換到"test"分支
git checkout -b test:建立test分支,并從目前分支切"換到"test"分支;如果test分支已經存在了,則會報錯
git checkout -b test666 master:從master分支"切出/建立"一個test666分支,test666這個分支是master分支的孩子
git checkout -- readme.txt:
強制回退到修改之前的内容
readme.txt檔案在工作區的修改全部撤銷,這裡有兩種情況,add之前和add之後:讓這個檔案回到最近一次git commit或git add時的狀态
5.分支合并
合并某分支到目前分支:git merge <name>
建立dev分支,在該分支下建立檔案,進行操作。操作完成後,在dev分支下進行commit送出,此時master看不到dev分支下的檔案了。是以我們需要将dev分支的内容合并到master上面。
此時我們可以git checkout到master分支,把dev分支的工作成果合并到master分支上。此時master分支就可以看到dev分支送出的檔案了。
管理者:
别人将代碼送出到遠端的dev分支,管理者會pull到本地,確定沒問題,再合并到本地的master,最後push到遠端的master分支。
四.clone克隆
git clone url:該指令将remote repository下載下傳到local
預設克隆遠端master分支的資料,并且預設克隆到目前目錄下(pwd指令的結果)
完整的例子:
git clone -b 遠端分支名 url 本地目錄 //克隆指定分支的資料,到指定的目錄下
git clone -b master http://gitee.com/a/b.git /d/workspace
補充:首次使用需要輸入賬密:
輸入你注冊的賬戶名(或者郵箱)和密碼即可
五:回退reset
步驟:
git log 檢視目前分支的送出資訊,此時我們可以找到需要回退的commitId
git reset --hard 3628164 //版本号沒必要寫全,前幾位就可以了,Git會自動去找
疑惑:
reset三種類型:
1.git reset --mixed commit的id
還原到commit的id,(git reset 預設是mixed )此commit之後的檔案變成modified紅色(即還沒add的狀态)
2.git reset --soft commit的id
還原到commit的id,此commit之後的檔案變成modified綠色(即add(勾選中)的狀态)
3.git reset --hard commit的id
還原到commit的id,此commit之後的檔案都被還原
注:還原的時候,應該提前一個commitId: