簡介(Git 分布式工作流程)
與傳統的集中式版本控制系統(CVCS)相反,Git 的分布式特性使得開發者間的協作變得更加靈活多樣。 在集中式系統中,每個開發者就像是連接在集線器上的節點,彼此的工作方式大體相像。 而在 Git 中,每個開發者同時扮演著節點和集線器的角色——也就是說, 每個開發者既可以將自己的代碼貢獻到其他的倉庫中,同時也能維護自己的公開倉庫, 讓其他人可以在其基礎上工作并貢獻代碼。 由此,Git 的分布式協作可以為你的項目和團隊衍生出種種不同的工作流程;
)
一.Git學習鏈接
二. Git初始化
當使用一臺新的機器,且從沒有使用過git。
- 首先從官網下載Git工具,Xcode自帶不用下,Intellj工具族需要下載安裝。
- 安裝好執行git config --global user.name “xxx” 配置git賬戶名
- git config --global user.email 'xxx' 推薦 這里填寫你常用的郵箱賬號作為你git的賬戶name
- git config --global --edit //可以直接修改全局的用戶名和郵箱
三. 新建代碼工程
以iOS開發為例
1.桌面新建一個工程名稱為App 終端進入App目錄
2.去GitHub網站建立自己的共有倉庫
3.Git初始化工程病進行第一次提交
3.1終端操作
Last login: Tue Sep 12 10:54:52 on ttys003
hongjunzhangdeMacBook-Pro:~ hongjunzhang$ cd Desktop/App
hongjunzhangdeMacBook-Pro:app hongjunzhang$ ls
app app.xcodeproj appTests appUITests
hongjunzhangdeMacBook-Pro:app hongjunzhang$ git init
hongjunzhangdeMacBook-Pro:app hongjunzhang$ git add README.md
hongjunzhangdeMacBook-Pro:app hongjunzhang$ git commit -m "first commit"
hongjunzhangdeMacBook-Pro:app hongjunzhang$ git remote add origin https://github.com/zhj1214/dasdsadasfa.git
hongjunzhangdeMacBook-Pro:app hongjunzhang$ git push -u origin master
3.2再啰嗦一句
之后的代碼修改和提交 請按照以下步驟:
git add .
git commit -m'備注日志'
git pull
git push
四.多人合作處理沖突
多人合作時當我們使用git pull合并他人代碼的時候有可能就會發生沖突
#使用git status查看那些文件有沖突
git status
# git diff 查看文件修改的內容
git diff
Git用<<<<<<<,=======,>>>>>>>標記出不同分支的內容,我們修改如下后保存:
4.1分別進入到每一個文件中,手動修改沖突的部位。修改完畢后,執行:
git add .
git commit -m'備注'
git pull
git push
4.2 某個文件你想使用對方/自己的版本
git checkout - -theirs xxx/A.js // 拋棄乙的版本,完全采用自己的
git checkout - -ours xxx/A.js// 拋棄自己的版本,保留乙的
Git官網 沖突操作
五.操作分支
- 新建分支
git branch 分支名(不會切換到新的分支)
git checkout -b 分支名(會同時切換到新的分支) - 查看已有分支
git branch -a - 切換分支
git checkout 分支名 - 將本地分支推到遠端服務器
git push --set-upstream origin xxx - 強制(覆蓋)推到遠端倉庫
#把master分支內容強制覆蓋遠端master
git push -u origin master -f
#將本地dev分支強制覆蓋遠端master分支
git push origin dev:master -f
- 刪除遠程分支
git push origin --delete 分支名字
- 刷新本地分支
git remote update origin --prune
- 刪除本地所有與遠程倉庫同步分支(本地修改過未提交的不會刪除)
git branch |xargs git branch -d
-
git merge:
master 合并了 xxx分支
六. commit日志
- 你還可以通過打開引號,按Enter并再次關閉帶引號的提交來實現相同的提交結構,包括標題和正文(多行)
git commit -m "commit title
>
> commit description"
- 提交歷史紀錄
git log - 提交版本記錄
git reflog - 查看所有的提交記錄 以及完整的 git comitid
git log --pretty=oneline - 用git log --graph命令可以看到分支合并圖
git log --graph - 查看遠端倉庫地址
git remote -v - 合并某個節點的代碼
git cherry-pick c75b60957e0867d317cc783943519662824d42f4
- 取消 上次的 commit (數組代表那一次)
git reset --soft HEAD~1
#reset 擴展
至于這幾個參數:
--mixed
意思是:不刪除工作空間改動代碼,撤銷commit,并且撤銷git add . 操作
這個為默認參數,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一樣的。
--soft
不刪除工作空間改動代碼,撤銷commit,不撤銷git add .
--hard
刪除工作空間改動代碼,撤銷commit,撤銷git add .
注意完成這個操作后,就恢復到了上一次的commit狀態。
git merge --abort
如果合并報錯有沖突則使用這個
順便說一下,如果commit注釋寫錯了,只是想改一下注釋,只需要:
git commit --amend
此時會進入默認vim編輯器,修改注釋完畢后保存就好了。
七. 版本回退
注意:版本回退在多人開發時一定到通知到所有人,讓大家刪除本地分支,重新拉去遠端的分支代碼
# 回退到某個節點
git reset --hard xxx(版本記錄號comitId)
# 回退后 常規操作如下:
git add .
git commit -m''
git push;
#xxxx 推送到遠端分支名稱
git push origin HEAD:xxxx -f
八. 跟蹤文件
#取消跟蹤文件
git update-index --assume-unchanged your_file_path
#繼續跟蹤文件
git update-index --no-assume-unchanged your_file_path
九. 創建標簽
在Git中打標簽非常簡單,首先,切換到需要打標簽的分支上:
1.查看所有tag
git tag
2.增加標簽
增加標簽之前請先commit 當前所有內容,或找到歷史提交的commit id給指定記錄增加標簽
#末尾可加 commit id, 這個id不是必須的
git tag -a v0.0.1 -m '第一個標簽' <commit id>
注意,標簽不是按時間順序列出,而是按字母排序的。可以用git show <tagname>查看標簽信息:
3.刪除標簽
#刪除本地標簽
git tag -d v1.0
#刪除遠端標簽
git push origin :refs/tags/v1.0
十一. rebase
- 使用rebase 刪除指定commit記錄
git rebase -I xxxxxxxxxxxx
#解決沖突
git add .;
git commit -m’提交’
git push origin HEAD:xxx -f
十二. 些常用命令
- 移除遠程提交的npm包文件
git rm --cached -r node_modules/
- 誤刪恢復
#刪除文件
rm -rf README.md
#當然可以撤銷 這個刪除恢復刪除的文件
git checkout -- README.md
- git stash
并不是你不想提交,而是工作只進行到一半,還沒法提交,預計完成還需1天時間。但是,必須在兩個小時內修復該bug,怎么辦?幸好,Git還提供了一個stash功能,可以把當前工作現場“儲藏”起來,等以后恢復現場后繼續工作:
#執行存儲時,添加備注,方便查找,只有git stash 也要可以的,但查找時不方便識別。
git stash save "save message"
#顯示做了哪些改動,默認show第一個存儲,如果要顯示其他存貯,后面加stash@{$num},比如第二個 git stash show stash@{1}
git stash show
#應用某個存儲,但不會把存儲從存儲列表中刪除,默認使用第一個存儲,即stash@{0},如果要使用其他個,git stash apply stash@{$num} , 比如第二個:git stash apply stash@{1}
git stash apply
#暫存列表
git stash list
#刪除并應用 臟代碼
git stash pop stash@{0}
#刪除這個臟代碼
git stash drop stash@{0}
#刪除所有緩存的stash
git stash clear
實際上,Git還有很多可配置項。
比如,讓Git顯示顏色,會讓命令輸出看起來更醒目:
git config --global color.ui true
- 快捷 方法
有沒有經常敲錯命令?比如git status?status這個單詞真心不好記。
如果敲git st就表示git status那就簡單多了,當然這種偷懶的辦法我們是極力贊成的。
我們只需要敲一行命令,告訴Git,以后st就表示status:
git config --global alias.st status
#最變態的 查看提交記錄方法
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
- 切換到遠程分支
#列出所有分支名稱如下:
git branch -a
remotes/origin/dev
remotes/origin/release
#作用是checkout遠程的dev分支,在本地起名為dev分支,并切換到本地的dev分支
git checkout -b dev origin/dev