git
git是現在最流行的版本管理工具,應用范圍非常廣泛,工作中基本都會用到(除了一些互聯網金融公司外)。使用git好處有很多,包括但不限於便於多分支開發,
歷史管理跟回滾方便,發布等。配合webhook,可以在ci上集成自動發布等。是一件利器。熟練git的一些基本操作,會給開發帶來很大好處。
命令行
個人並不是完全使用命令行來進行所有的git操作的,使用圖形化工具真的會方便很多。然而有些情況下也會使用到命令行的方式來進行某些操作。了解一些命令行,會更好。
- 基本操作
git clone rep_address // 克隆一個遠程庫
git status //查看當前狀態
git add file_name //將某個文件添加到git
git add . // 將所有新文件添加到git
git commit -am 'message' // 提交所有更改,帶描述
git push //提交到遠程庫
git diff //查看diff
- 分支
git checkout branch_name //checkout到某個分支
git branch //查看分支
git branch some // 新建一個名為some的分支
git push [遠程名] :[分支名] //刪除某一遠程分支
- 提交到遠程倉庫
//創建本地倉庫,並push到遠程倉庫
git init //將本地目錄添加到倉庫
git remote add [shortname] [url]
git add .
git commit -am 'first commit'
git push --set-upstream [url]/[shortname] master
- 提交者
(PS: Md里'-'分點,下面的內容有斷行就會分開,所以嵌入的代碼塊不能帶空行,不然顯示出錯)
// 設置全局
git config --global user.name 'Author Name'
git config --global user.email 'Author Email'
// 或者設置本地項目庫配置
git config user.name 'Author Name'
git config user.email 'Author Email'
- cherry pick
git cherry-pick [commit-id] //將某個commit,cherry pick到當前分支
- 合並
git merge xxx //將某個指定分支合並到當前分支
git merge [commit-id] //將另一個分支某個commit-id為止的代碼merge到當前分支
- stash
git stash //保存當前的工作進度。會分別對暫存區和工作區的狀態進行保存
git stash save "message..." //這條命令實際上是第一條 git stash 命令的完整版
git stash list //顯示進度列表。此命令顯然暗示了git stash 可以多次保存工作進度,並用在恢復時候進行選擇
git stash pop [--index] [<stash>] //如果不使用任何參數,會恢復最新保存的工作進度,並將恢復的工作進度從存儲的工作進度列表中清除。如果提供參數(來自 git stash list 顯示的列表),則從該 <stash> 中恢復。恢復完畢也將從進度列表中刪除 <stash>。選項--index 除了恢復工作區的文件外,還嘗試恢復暫存區。
git stash apply [--index] [<stash>] //除了不刪除恢復的進度之外,其余和 git stash pop 命令一樣
git stash clear //刪除所有存儲的進度
git stash show -p //查看最近stash的diff
git stash show -p stash@{1} //查看某個stash的diff
- 回滾
git reset --hard [commit-id] //回滾到某個commit , 可選 --soft, --mixed
- 標記
git update-index --assume-unchanged [filename] //假定某個文件沒有發生變化,但是切換分支,pull代碼會更新index
git update-index --no-assume-unchange [filename] //取消
git update-index --skip-worktree [filename] //將某個文件從git檢測中忽略
git update-index --no-skip-worktree [filename] //取消
- 統計
//統計倉庫里每個人的提交行數
git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done
- ssh
見gitoschina的教程,講得很詳細。--> git ssh
gui工具
git的圖像化管理工具有兩個是比較推薦用的,sourceTree以及GitKraken。個人比較喜歡GitKraken,所以下面會以Gitkraken為例介紹。在sourceTree上操作也是差不多的。
簡單操作
一些克隆倉庫,pull代碼,commit代碼,push代碼等操作相當簡單,就不多做介紹了。
如下圖
cherry pick
切換分支,然后在另一個分支上的某個commit上右擊,選擇cherry pick就可以把該commit,提交到當前分支。
stash
stash可以將所有的未提交更改暫存起來。本地代碼做了更改,可以先stash起來,然后pull更新,再次pop,stash。
在GitKraken里,stash也非常簡單,而且每次pull代碼時,GitKraken會自動幫我們進行,以下操作
- stash 更改
- pull 更新
- pop stash
- 手動處理沖突(如果有)
非常方便/
merge
在GitKraken上,merge分支很方便,直接將另一分支拖動到當前分支,即可合並
合並多個commit
有時提交了很多commit,比如有1,2,3,共三個commit,這三個commit都是為了實現某個功能而做的更改。那么我們可以把這三個commit合並成一個再進行提交。
操作,右擊第一個commit的前一個提交,選擇reset to this commit -> soft, 這樣就會把1,2,3,三個commit的更改合並在一起,然后再把這些更改重新提交一次即可。