工作7年收集到的git命令

2022-10-04 12:00:35

概念

git 中的術語解釋:

  • 倉庫也叫版本庫(repository)
  • stage:暫存區,add 後會存到暫存區,commit 後提交到版本庫

git 安裝

linux 下安裝 git

  • 第一種方法:yum install git-core 安裝的版本比較老

  • 第二種方法:(我是 linux centos)

    • 解除安裝老版本
    yum remove gi
    
    • 安裝依賴
    yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc
    yum install gcc perl-ExtUtils-MakeMaker
    
    • 執行安裝
    wget https://github.com/git/git/archive/v2.2.1.tar.gz
    tar -zxvf v2.2.1
    cd git-2.2.1
    make configure
    ./configure --prefix=/usr/local/git --with-iconv=/usr/local/libiconv
    make
    make install
    echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc
    source /etc/bashrc
    

初始化一個倉庫用

  1. 先新建一個資料夾 mkdir test
  2. 進入該資料夾執行 git init 命令,就能初始化倉庫了

命令合集

提交相關

新增檔案到倉庫(實際就是把工作區的內容新增到暫存區)

git add <file>

提交程式碼(就是把暫存區的內容提交到當前分支)

git commit -m "說明"

強制提交,比如用舊版本覆蓋老版本時原本會報錯,就可以用下面的命令

git push -f origin master

檢視提交歷史

git log

記錄著操作命令,也就是命令歷史

git reflog

將現有工作區的隱藏起來(一個分支開發到一半,程式碼還不能提交,但是需要切換到別的分支去看看程式碼時可以使用)

git stash

恢復隱藏的工作區

git stash pop

清空隱藏的工作區

git stash clear
git stash drop stash@{0} 刪除第一個佇列

檢視隱藏的工作區的內容

git stash list

指定恢復哪一個隱藏的工作區內容

git stash apply stash@{0}

提交時忽略指定檔案

  • 在.gitignore 中寫要忽略的檔名即可
  • 如果已經使用過 add 命令了,那麼要先執行 git rm -r --cached .
  • 然後在使用 add . 才能加入忽略規則

合併分支時合為一次提交

git merge --squash dev

取消命令
取消 rebase

git rebase --abort

取消提交了的內容

git reset --soft HEAD^

清除快取/清除已經推上去的不要的檔案

git rm -r --cached . //需要完整複製

清除推上去的 idea 相關檔案

git rm --cached -r .idea

復原相關

將工作區的修改復原掉

git checkout -- a.txt (注意:--很重要,如果沒有--,這個命令就變成了切換分支)

這個復原會有兩種效果:

第一種是修改後沒有放到暫存區,那麼復原後會回到和版本庫一樣的狀態

第二種是修改後放入了暫存區,又做了修改,那麼復原後會回到和暫存區一樣的狀態。

總之,就是讓這個檔案回到最近一次 git commit 或 git add 時的狀態。

將暫存區的修改復原掉

git reset HEAD file

程式碼回退 (提交一次就有一個版本,HEAD 表示當前版本,HEAD^表示上一個版本,HEAD~10 表示前第 100 個版本)

git reset --hard HEAD^ //回退到上一個版本

程式碼回退之後還可以前進,只要知道前一個版本的版本號

git reset --hard 3628164 //版本號不用寫全,前幾位即可

如果刪除了檔案,想讓版本庫裡的檔案也刪掉

#第一步
git rm -- a.txt
#第二步
git commit -m ""

想讓工作區刪除的檔案恢復

git checkout -- a.txt

復原新增的檔案

rm filename / rm dir -rf //單個檔案
git clean -xdf //所有檔案

遠端庫推播相關

關聯遠端庫

git remote add origin [email protected]:mmcLine/firstGit.git

取消關聯取消關聯

git remote remove origin

第一次推播資訊

git push -u origin master

不是第一次推播資訊

git push origin master

檢視遠端庫的資訊

git remote
# 更詳細的資訊
git remote -v

推播遠端倉庫有衝突的處理

git push origin dev #發現失敗,有衝突
git pull #把最新的提交抓下來(git pull如果失敗執行 git branch --set-upstream dev origin/dev)
# 在合併,如果有衝突就手動解決後在提交

更新遠端庫的程式碼

git fetch origin
git rebase origin

克隆程式碼(僅克隆最近的一次提交記錄的最新版本)

git clone url --depth=1

分支相關

建立分支

git branch <name>

切換分支

git checkout dev

建立並切換分支

git checkout -b dev

檢視當前分支

git branch

把 dev 分支合併到 master 上

git merge dev

刪除分支

git branch -D dev

檢視提交的分支表

git log --graph

禁用 Fast forward 的合併,禁用後每次都會有新的提交

git merge --no-ff -m "merge with no-ff" dev

僅合併某次提交

# commitid是提交的id
git  cherry-pick commitid

其他

設定 git 操作命令的別名

 git config --global alias.st status 將git status 設定別名為git st

組態檔在.git 裡面的 config 裡面,或者對應使用者的家目錄的.gitconfig 裡面

  • 刪除別名就在檔案裡刪除別名就好了

github 相關操作

  1. 從 github 下載程式碼
git clone git://github.com/mmcLine/firstGit.git
# 也可使用https
git clone https://github.com/mmcLine/firstGit.git
  1. 推播程式碼到 github

修改了程式碼之後先

git add test.txt
git commit -m "test"
git push -u origin master 第一次推播命令
git push origin master 以後的推播命令

建立專案並關聯

  1. 先在伺服器上建立一個資料夾
  2. 然後在資料夾下執行 git init --bare
  3. 在本地建立一個倉庫
  4. 然後關聯遠端庫
git remote add origin [email protected]:/data/git/tofocus
  1. 然後上傳本地專案

遇到的錯誤

  1. 新增遠端設定時出現 fatal: 遠端 origin 已經存在。提示

處理方法:git remote rm origin

  1. 從 github 克隆時報這個錯誤 while accessing https://github.com/mmcLine/gitskills.git/info/refs

處理方法: git 的版本太低了,我之前是 yum 安裝了,我解除安裝了用原始碼安裝就好了

處理衝突:

  1. 更改衝突的地方
  2. 在 git gui 裡面把衝突的類點一下

  1. 讓上面那個區域的類都沒有了。
  2. 然後 git rebase --continue