git 操作命令詳解
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 操作命令詳解