git 操做命令詳解

git

什麼是git

開源的分佈式版本控制系統, 用於高效的管理大小項目和文件git

代碼管理工具

  • 防止代碼丟失, 作備份
  • 代碼版本管控, 設置節點, 多版本切換
  • 創建分支各自開發, 互不影響, 方便合併
  • 多人協調, 方便代碼共享傳輸

git 特色

開源, 多在 *nix 下使用緩存

分佈式管理工具 (svn 集中式)安全

每臺主機都有完整代碼, 代碼的交互是增量更新服務器

擁有更好的分支支持, 方便多人協調工做網絡

分佈式

  • 由中間服務器來集中管理
  • 權限也由中央控制
  • 數據保密性更好, 由於只經過中央處理
  • 可是中央服務器若是炸了就gg
  • 並且所有依靠中央, 對網絡之類的環境要求較高

集中式

  • 無中央服務器, 每一個主機都是均等的
  • 每一個主機均可以保存代碼以及推送給其餘主機
  • 不論只要不是全部主機都炸了, 均可以從其餘的主機獲取到
  • 以及主機拉取的時候不依賴 中央服務器的環境, 更加安全快速

git 實際工做模式

雖然 分佈式的git 不須要依靠中央節點app

可是 實際工做仍是會定義中央主機, 工做模式模擬的是 集中式管理分佈式

git 安裝

sudo  apt-get install git

git 空間

工做區  項目所在操做目錄, 項目操做區域svn

暫存區  用於記錄工做區的工做(修改)內容工具

倉庫     將記錄內容備份fetch

遠程倉庫  遠程主機上的 git 倉庫

git 初始化配置

git config

配置系統全部用戶

git config --system [選項]
配置文件位置:
/etc/gitconfig

配置當前用戶

git config --global [選項]
配置文件:
~/.gitconfig

配置當前項目

git config [選項]
配置文件: 項目目錄
/.git/config
* 要求必須在項目下執行 * 順序 項目>當前用戶>全部用戶

配置用戶名(必需要配置)

sudo git config --system user.name yangtuo

執行位置  任何位置

實例

tarena@tedu:~$ sudo git config --system user.name yangtuo
[sudo] tarena 的密碼:
tarena@tedu:~$
tarena@tedu:~$ cat /etc/gitconfig
[user]
    name = yangtuo
tarena@tedu:~$

配置用戶郵箱(必需要配置)

sudo git config --global user.email 745206110@qq.com
實例
tarena@tedu:~$ sudo git config --global user.email 745206110@qq.com
tarena@tedu:~$ cat ~/.gitconfig
[user]
    email = 745206110@qq.com
tarena@tedu:~$

查看當前項目 配置信息

git config --list
實例
tarena@tedu:~/git$ git config --list
user.name=yangtuo
user.email=745206110@qq.com
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.editor=vscode
tarena@tedu:~/git$

git  基本操做

初始化倉庫

將某個項目目錄, 變爲 git 操做目錄, 生成 git 本地倉庫
該目錄便可使用 git 進行管理

git init

 實例

tarena@tedu:~/git$ git init
初始化空的 Git 倉庫於 /home/tarena/git/.git/
tarena@tedu:~/git$

基本的空間操做示例圖

查看分支狀態

git status

初始默認分支爲 master

當工做區和倉庫 不一致的時候, 會有所提示

將工做區內容記錄到暫存區

git add files
git add file1, file2
git add .

 ps 

  git add . 2.0 版本以後就能夠支持全部的操做, 固然也包括刪除文件也能夠提交

  以前 1.0 版本 . 的操做是沒法提交刪除文件操做的

取消文件暫存記錄

git commit -m 'add some files'

將暫存區內容同步到倉庫

每次同步都須要添加 [msg] 同步信息 格式爲字符串

commit 操做只能同步暫存區已經記錄的內容

git commit -m [msg]

查看 commit 日誌

一個是詳細查看, 一個是簡單查看

git log
git log --pretty=oneline

實例

tarena@tedu:~/git$ git log
commit 3f8c95ebeb0998f9f4de793ceb856827a5da27fc
Author: yangtuo <745206110@qq.com>
Date:   Thu Mar 7 16:17:36 2019 +0800
新添加了一個電子詞典項目

實例

tarena@tedu:~/git$ git log --pretty=oneline
3f8c95ebeb0998f9f4de793ceb856827a5da27fc 新添加了一個電子詞典項目
5f8a36d92345fc685381418125a69e63d9163df3 所有刪掉
9bcdb97cae7082b59b532c817b1e08e8cde3ec9a add some files
tarena@tedu:~/git$

文件比較

用於比較工做區文件和倉庫文件差別
git diff [file]

丟棄工做區的修改

git checkout -- file

從倉庫恢復文件

git checkout file

移動 / 刪除 文件並提交緩存

git mv [file] [path]
git rm [file]

版本控制

退回到上一個的 commit 節點

git reset --hard HEAD^

HEAD 是 commit 指針

一個 ^ 表明後退一個

一般不會寫太多, 最多兩個三個而已

去往指定的 commit 操做節點

git reset --hard [commit_id]

commit_id 不須要全寫, 前7位就夠了

去往指定的節點後, 在此節點後的全部版本會沒法查看

能夠經過 git reflog 來所有查看

查看全部的歷史

git reflog

利用該操做,能夠去往任意的歷史位置

標籤操做

標籤建立

git tag[名稱] -m [message]

標籤  在工做的重要位置添加的快照, 保存當時的工做狀態

通常用於版本迭代等

注意  message 能夠不寫, 可是最好添加

查看全部標籤

git tag

將標籤 給指定的 commit_id 添加

git tag [tag_name] [commit_id] -m [message]

查看標籤詳細信息

git show [tag]

刪除標籤

 git tag -d [tag_name]

去往某個標籤節點

git reset --hard[tag]

臨時工做區

建立臨時保存工做區

讓工做區回到修改前狀態

而且修改保存在一個臨時工做區

git stash

查看臨時工做區列表

最新的工做區記錄爲 stash{0} 依次排列

git stash list

將臨時應用到工做區

git stash apply stash@{2}

將臨時工做區刪除

git stash drop [stash]  刪除一個
git stash clear     刪除全部

分支管理

分支即每一個人在原有代碼基礎上創建本身的工做環境, 獨立開發, 不回干擾其餘分支操做 完成後合併到主線

多人開發創建分支優勢: 安全, 不影響其餘分支, 獨立控制進度

查看分支狀況

前面 * 的表示當前工做分支

git branch

建立新的分支

git branch [branch]

切換分支

git checkout [branch]

合併分支

表示將某個基於當前分支創建的分支,合併過來

合併分支過程當中可能產生衝突,須要手動解決

在分支操做中儘可能添加新的模塊,不要修改原有代碼內容

git merge [branch]

刪除分支

未合併的分支是沒法用 -d 刪除的( 防手滑,防惡意手滑 )

必須使用 -D 才能夠刪除未合併的分支

 git branch -d [branch]

遠程倉庫管理

遠程倉庫

遠程主機上的 git 倉庫

git 做爲分佈式結構 每臺主機的 git 倉庫結構類似 只是把其餘主機上的 git 倉庫做爲遠程倉庫

共享倉庫

git 分佈式結構衍生了不少工做模式 共享倉庫是經常使用的模式之一\

普通隱藏的 .git 倉庫不能被其餘主機獲取代碼 共享倉庫便可以將 git 項目共享的倉庫

建立本身的遠程倉庫

選擇共享庫目錄,設置目錄屬主

mkdir yangtuo_git
chown tarena:tarena yangtuo_git

初始化該目錄爲 git 倉庫, 設置 bare 屬性

 yangtuo 項目名稱

.git 習慣後綴

cd gitrepo/
git init --bare yangtuo.git

將配置 git 目錄設置爲 和共享倉庫目錄相同的屬主

chown -R tarena:tarena yangtuo.git

添加項目到共享倉庫

添加項目到共享倉庫

該操做要在本地的一個 git 項目中執行

與遠程鏈接默認使用 SSH 方法

origin 是給遠程主機起的名字

git remote add origin tarena@127.0.0.1:/home/tarena/yangtuo_git/yangtuo.git

刪除遠程主機

鏈接多個遠程主機的時候 遠程名字不能重複

 git remote rm [origin]

將本地分支推送到遠程共享倉庫

-u 表示創建對應分支自動關聯 通常首次向遠程推送某個分支時使用

git branch -a 查看連接的遠程分支 git branch -r 只查看遠程分支

 git push -u [origin] [branch]

-f 本地強制上傳到遠程,把遠程的覆蓋

git push -f origin master

獲取遠程倉庫項目

 git clone tarena@172.40.91.185:/home/tarena/gitrepe/tedu.git

從遠程獲取最新代碼

clone 已經自動創建了關聯, pull 能夠直接拉取代碼到對應分支

git pull

--rebase 拉取遠程的文件把本地的覆蓋

git pull --rebase origin master

從遠程獲取最新內容到本地

制霸遠程分支拿來 並不在合併

若想合併 則在須要 git merge [branch]

git fetch

能夠改拉取過來以後的分支名字

git fetch origin master:tmp

推送標籤

git push [origin] [tag]

推送落後版本

噹噹前版本落後於遠程版本 沒法更新時使用

git push --force origin
相關文章
相關標籤/搜索