本篇并不涉及git的所有知識,內(nèi)容包括工作中每天用到的以及需要知道的
一、從遠程倉庫拉取指定分支到本地倉庫,并創(chuàng)建個人分支
1. git clone 項目地址 (克隆整個項目)
2. git checkout dev (切換到dev分支,在本地創(chuàng)建dev分支并與遠程進行關聯(lián))
3. git checkout -b 我的分支 (基于dev創(chuàng)建并切換到我的分支)
4. git push -u origin 我的分支 (將個人分支推送到遠程倉庫)
?二、(補充)基于以上補充幾點基礎知識點以便你更好理解并實踐
1. 主分支:通常是master分支
2. 開發(fā)分支:基于主分支派生,你通常在這個分支上建立自己的分支
3. 特性分支:為開發(fā)單獨功能,基于開發(fā)分支派生,屬于“我的分支”
4. 發(fā)布分支:基于主分支派生,包含與發(fā)布相關的所有更改
5. 熱修復分支:基于主分支派生,用于快速修復緊急問題
三、拿到項目以后的幾個注意細節(jié)
1. cd到正確的項目,git checkout到正確的分支(往往一個大倉庫里包含許多項目,要到你的項目中來)
2. 在執(zhí)行每個子項目之前,都需要單獨安裝依賴,比如:npm install
四、配置全局的用戶名和郵箱信息
1. 修改用戶名:git config --global user.name "username"
2. 修改郵箱:git config --global user.email "email@example.com"
3. 查看用戶名:git config user.name
4. 查看郵箱:git config user.email
五、查看自己的修改
git status 可以查看自己剛才修改代碼的文件
git diff 可以查看自己剛才修改的具體代碼
六、一張圖來解釋操作流程
Remote是遠程倉庫,Repository是本地倉庫,workspace是我的工作區(qū)。
你從遠程倉庫clone代碼到本地倉庫,然后在本地倉庫checkout到我的工作區(qū),
當你每次修改完代碼要提交,這也是你基本每天都需要做的步驟:
從我的工作區(qū)add到本地緩存區(qū),然后commit到本地倉庫,然后push進遠程倉庫,
下面我來仔細講講這一步該怎么做!
七、如何提交自己的代碼
1. git status (查看修改)
2. git add . (提交到緩存區(qū))
3. git commit -m "xxx" (提交到本地倉庫)
4. git push (推進遠程倉庫)
5. git checkout master (切換到需要合并的分支,這里以master為例)
6. git pull (拉取這個分支的最新代碼)
7. git merge master (合并,這個時候可以切換到自己的分支)
8. git status (可以在查看一下)
9. git push (push進去)
八、關于rebase
rebase也一直是讓我比較頭疼的地方,在工作中我盡量避免使用,我通常使用merge
rebase,變基,改變基底,feature分支是基于master分支B拉出來的分支,feature的基底是B,而master在B之后有新的提交,此時會把master分支的提交作為feature的新基底,在操作中就是把B之后的feature的提交暫存下來,然后刪掉原來的提交,再找到master最新的提交位置,把存下來的提交接上去,解決沖突,feature的基底變成了M而不是B
當在feature分支上執(zhí)行git rebase master時,git會從master和feature的共同祖先B開始提取feature分支上的修改,也就是C和D兩個提交,提取到,然后將feature分支指向master分支的最新提交上,也就是M,最后把提取到的C和D接到M后面(依次拿M和C、D內(nèi)容分別比較,處理沖突后生成新的C'和D')
開發(fā)場景:遠程??上有一個分支開發(fā)到B了,我從B拉了代碼到我的分支進行開發(fā),目前提交了兩次,開發(fā)到D,另外一個人也從B拉到本地的master分支,他提交到了M,然后合到遠程庫上的master了,我想拉取master的最新代碼,于是在我的分支上執(zhí)行了rebase操作,即把遠程的master分支給rebase下來,因為另一個人比我早開發(fā)完,所以此時的master上是他的最新內(nèi)容,rebase后再看我的歷史提交記錄,就相當于我是基于另一個人提交的最新M進行開發(fā)的了。
九、Merge 合并
把分叉的提交歷史放回到一起,通常被用來合并兩個分支,git merge接受兩個commit指針,追溯到兩個分支最近的共同分支,然后創(chuàng)建一個新的“merge commit",用來合并兩個分支上各自的提交序列
有兩種類型:
1. 快進式合并:目標分支是被合并分支的直接祖先,合并過程不會哦產(chǎn)生沖突
2. 三方合并: 目標分支和被合并分支在歷史上有分叉,找到共同祖先進行比較,新的提交會包含兩個分支的差異內(nèi)容,可能出現(xiàn)沖突合并
十、git merge 和 git rebase 的區(qū)別
merge:是將分支A和分支B合并為一個新的提交,把修改合并,一個新的合并,保留了各個分支的獨立性
rebase:將當前分支的修改和提交應用到目標分支的最新提交之后,線性的提交歷史,避免合并產(chǎn)生的分叉
1. 拉取公共分支最新代碼 -- rebase
2. 往公共分支上合并代碼 -- merge
盡量不要使用rebase,因為有個缺點就是不知道我當前的分支是從哪個分支上拉出來的,因為基底變了,其他人想看分支的歷史,就不再是原來的歷史了,歷史被篡改了
十一、git stash
分支有改變時不能提交又不能切換分支,會保存當前的工作進度,把暫存區(qū)和工作區(qū)的改動保存到棧中,需要時再恢復,執(zhí)行完這個命令以后,git status是clean
1. git stash save "message" 這是帶上注釋
2. git stash pop 默認恢復git棧中最新的stash,建議在棧中只有一條時使用(棧刪除)
3. git stash list 查看所有隱藏,每一行冒號前面的字符串就是標識此隱藏的id
4. git stash apply n 將內(nèi)容恢復到當前分支下,n為stash list結果里的序號(棧保留)
5. git stash drop n 恢復隱藏后,從棧中移除指定的stash
6. git stash clear 移除全部的stash
7. git stash show 查看棧中最新保存的stash和當前目錄的差異,顯示改動
十二、git常用命令
git log 查看所有提交的記錄
git branch 查看本地分支
git branch -r 查看遠程分支
git branch -a 查看全部分支
git branch -d [分支名] 刪除本地分支
git push origin :[分支名] 刪除遠程分支
git reset HEAD 使暫存區(qū)的代碼退回到最近的一次狀態(tài),即撤銷git add .
十三、常見報錯
1. pull之前要commit
2. 合并沖突:兩個人改了同一個地方
解決:手動解決問題,看看使用什么代碼,然后再進行提交操作
3. push未設置關聯(lián)遠程分支報錯
使用git push報如下錯誤:fatal:The current branch master has no upstream branch
解決1: 根據(jù)需要替換分支名:git push --set-upstream origin master
解決2: 根據(jù)需要替換分支名,遠程分支master不存在會創(chuàng)建:git push -u origin master
4. 沖突報錯系列
方法:保留本地代碼:中止合并 --> 重新合并 --> 重新拉取
step1: git merge --abort
step2: git reset --merge文章來源:http://www.zghlxwxcb.cn/news/detail-752858.html
step3: git pull文章來源地址http://www.zghlxwxcb.cn/news/detail-752858.html
到了這里,關于初入公司用不好git ?-- 本篇針對GitLab的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!