常用 git 命令

1、基本命令

  • git add .
  • git commit -m "first commit "
  • git push 遠程倉庫 本地分支:遠程分支
  • git pull 遠程倉庫 遠程分支:本地分支
  • git checkout -b "name" origin/release 創建并切換分支(以遠端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 丟棄暫存區修改
  • git remote update origin -p 同步本地分支與遠程分支

2、進階命令

  • git show // 顯示當前分支的提交歷史
  • git log // 顯示所有分支的提交歷史
  • git commit --amend //該命令會觸發vim編輯器,用于編輯提交信息(此命令只適合本地commit尚未提交到遠端,否則會有沖突)
  • git checkout -- filename // 取消工作區修改,即沒有git add .過的文件
  • git reset HEAD -- filename // 取消暫存區,即git add .過但沒commit過的文件,注意‘--’前后有空格
  • git reset HEAD~n // 撤銷本地倉庫當前HEAD之前n個版本的提交,暫存區會被干掉,工作區保留
  • git reset --hard HEAD~n //撤銷當前HEAD之前n個版本的提交,暫存區和工作區都會被干掉
  • git merge branch-name //在當前分支合并branch-name分支
  • git rebase master // 在當前分支rebase master分支
  • git diff // 工作區和暫存區對比
  • git diff --staged // 暫存區和HEAD對比
  • git stash //切換分支前將工作區和暫存區(未git add 和 git add .的文件)放置臨時存儲區,否則會帶到其他分支去
  • git stash pop // 取出臨時存儲區
  • git stash drop // 扔掉臨時存儲區
  • 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 查看各成員提交次數
  • 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 的區別
    merge執行一個合并,或者說一個融合。我們希望在當前分支上往前走,所以我們需要融合合并其他分支的工作,從而放棄其他的分支。一般是在master分支上merge其他分支,出現沖突解決即可。
    rebase存在的價值是:對一個分支做“變基”操作,這意味著改變這個branch的初始commit。它會在新的base上一個一個地運行這個分支上的所有commits.一般是在其他分支上rebase master分支,然后切回master分支,再做merge操作。
  • 怎么解決沖突
    首先搞清楚沖突的是哪個文件,其次搞清楚沖突的雙方內容的位置,即哪個是本地的,哪個是遠程的。見下圖:


    解決沖突

    image.png

4、分支工作流

  • 多人協作


    多分支

    注意:此圖代表的是遠端分支情況!每次提交代碼前請git pull代碼,因為可能別人修改過遠端branch分支

  • 個人工作流程
    比如你要做個新功能,則基于 master 分支創建 feature 分支,然后在本地執行git checkout -b dev ,在dev分支上開發,當dev分支的功能完成后,切回本地 feature 分支,在 feature 分支上執行git merge dev操作,然后提測 feature 分支。測試通過后,在master 分支上進行合并操作
  • 分支管理


    分支管理

5、可視化工具 sourceTree

用SourceTree輕松Git項目圖解
SourceTree 免登錄跳過初始設置
SourceTree通過配置SSH來鏈接GitLab

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。