1. 程式人生 > >git 操作命令詳解

git 操作命令詳解

比較 clone 模式 開發 是把 ins ren 之一 擁有

git

什麽是git

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

代碼管理工具

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

git 特點

開源, 多在 *nix 下使用

分布式管理工具 (svn 集中式)

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

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

分布式

  • 由中間服務器來集中管理
  • 權限也由中央控制
  • 數據保密性更好, 因為只通過中央處理
  • 但是中央服務器如果炸了就gg
  • 而且全部依靠中央, 對網絡之類的環境要求較高

集中式

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

git 實際工作模式

雖然 分布式的git 不需要依靠中央節點

但是 實際工作還是會定義中央主機, 工作模式模擬的是 集中式管理

git 安裝

sudo  apt-get install git

git 空間

技術分享圖片

工作區  項目所在操作目錄, 項目操作區域

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

倉庫     將記錄內容備份

遠程倉庫  遠程主機上的 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 [email protected]
實例
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 <[email protected]>
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 [email protected]:/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 [email protected]:/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

git 操作命令詳解