1、基本命令
- git add .
- git commit -m "first commit "
- git push 遠程倉庫 本地分支:遠程分支
- git pull 遠程倉庫 遠程分支:本地分支
- git checkout -b "name" origin/release 創(chuàng)建并切換分支(以遠端origin為基準)
- git branch 列出本地所有分支
- git branch -r 列出遠端所有分支
- git push origin --delete test 刪除遠程分支
- git branch -d test 刪除本地分支
- git branch -D test 如果有未提交的文件瞧毙,用它
- git 2.23.0 以后版本救鲤,可以使用 git switch 切換分支忍坷,git restore path 丟棄暫存區(qū)修改
- git remote update origin -p 同步本地分支與遠程分支
2奴饮、進階命令
- git show // 顯示當前分支的提交歷史
- git log // 顯示所有分支的提交歷史
- git commit --amend //該命令會觸發(fā)vim編輯器薄坏,用于編輯提交信息(此命令只適合本地commit尚未提交到遠端燕偶,否則會有沖突)
- git checkout -- filename // 取消工作區(qū)修改,即沒有git add .過的文件
- git reset HEAD -- filename // 取消暫存區(qū)旺韭,即git add .過但沒commit過的文件氛谜,注意‘--’前后有空格
- git reset HEAD~n // 撤銷本地倉庫當前HEAD之前n個版本的提交,暫存區(qū)會被干掉区端,工作區(qū)保留
- git reset --hard HEAD~n //撤銷當前HEAD之前n個版本的提交值漫,暫存區(qū)和工作區(qū)都會被干掉
- git merge branch-name //在當前分支合并branch-name分支
- git rebase master // 在當前分支rebase master分支
- git diff // 工作區(qū)和暫存區(qū)對比
- git diff --staged // 暫存區(qū)和HEAD對比
- git stash //切換分支前將工作區(qū)和暫存區(qū)(未git add 和 git add .的文件)放置臨時存儲區(qū),否則會帶到其他分支去
- git stash pop // 取出臨時存儲區(qū)
- git stash drop // 扔掉臨時存儲區(qū)
- git stash --keep-index // 存儲沒有git add過的文件织盼,用于不想提交某個文件
- git cherry-pick commitID //在當前分支上提取別的分支的某次提交
- git reflog 查看HEAD指針位置杨何,git reset HEAD@{number} 回到某次提交
- git tag -a "v2.8.0" -m "導入" 添加tag
- git push origin v2.8.0 推送tag
- git pull --rebase 避免多余的 commit 信息
- git merge --squash branch_name 重新提交,一般用于往主分支上合并代碼沥邻,避免將功能分支的提交記錄合并到主分支上危虱,方便回退
- git bisect start HEAD ffnc // git 調試 git bisect bad/good/reset
- git shortlog -sn 查看各成員提交次數(shù)
- git log --author="" 查看哪個人的提交
- git grep "fe" 查看哪些文件包含 fe
- git subtree 相關
// 命名遠端倉庫為 common
git remote add -f common git@code.aliyun.com:happy-life/hl-common-frontend.git
// 添加公共模塊 common 到 src/app/common 目錄下,并使用 common 倉庫的 prod 分支
git subtree add --prefix=src/app/common common prod --squash
// 從子倉庫拉取更新
git subtree pull --prefix=src/app/common common prod --squash
// 推送更新到子倉庫
git subtree push --prefix=src/app/common common prod
3、常見問題
- 切分支時當前分支的修改被帶到另一個分支問題
有兩種情況:1唐全、當前分支新建了文件(原分支沒有這個文件)埃跷,在切分支之前必須commit掉才不會帶到另一個分支;
2邮利、當前分支修改了某個文件(原分支有這個文件)弥雹,在切分支之前有兩種選擇:1、可以使用stash命令緩存起來延届,這樣不會帶到另一個分支剪勿,當再切回該分支時,再用stash pop命令恢復緩存的修改方庭,這種方式使用的更多厕吉;2、commit掉 - rebase 和 merge 的區(qū)別
merge執(zhí)行一個合并二鳄,或者說一個融合赴涵。我們希望在當前分支上往前走,所以我們需要融合合并其他分支的工作订讼,從而放棄其他的分支。一般是在master分支上merge其他分支扇苞,出現(xiàn)沖突解決即可欺殿。
rebase存在的價值是:對一個分支做“變基”操作,這意味著改變這個branch的初始commit鳖敷。它會在新的base上一個一個地運行這個分支上的所有commits.一般是在其他分支上rebase master分支脖苏,然后切回master分支,再做merge操作定踱。 -
怎么解決沖突
首先搞清楚沖突的是哪個文件棍潘,其次搞清楚沖突的雙方內容的位置,即哪個是本地的,哪個是遠程的亦歉。見下圖:
解決沖突
image.png
- git 配置 ssh
Git SSH Key 生成步驟
4恤浪、分支工作流
-
多人協(xié)作
多分支
注意:此圖代表的是遠端分支情況!每次提交代碼前請git pull代碼肴楷,因為可能別人修改過遠端branch分支
- 個人工作流程
比如你要做個新功能水由,則基于 master 分支創(chuàng)建 feature 分支,然后在本地執(zhí)行git checkout -b dev 赛蔫,在dev分支上開發(fā)砂客,當dev分支的功能完成后,切回本地 feature 分支呵恢,在 feature 分支上執(zhí)行git merge dev操作鞠值,然后提測 feature 分支。測試通過后渗钉,在master 分支上進行合并操作 -
分支管理
分支管理
5彤恶、可視化工具 sourceTree
用SourceTree輕松Git項目圖解
SourceTree 免登錄跳過初始設置
SourceTree通過配置SSH來鏈接GitLab