GITHUB常用命令


 
Git 速查表(摘自 AI有道)

一、常見命令

  • git init : 初始化 git 倉庫,即將一個文件夾初始化為一個 git 倉庫。具體的操作是創建一個 .git 隱藏文件夾
  • git status : 查看倉庫的狀態
  • git add <file> : 將文件提交到暫存區
  • git commit -m <代碼提交信息> : 將暫存區的文件提交到倉庫中,並附帶說明信息
  • git log : 查看所有產生的 commit 記錄
  • git config -l : 查看自己的配置,默認配置都在.git/config 文件中

1.2 分支相關的命令

  • git branch <branch_name> : 如果不加上 <branch_name>,查看當前分支情況。如果加上,就是創建一個分支。
  • git checkout <branch_name> : 切換到<branch_name>的分支上
  • git checkout -b <branch_name> : 創建一個分支並切換到這個分支上,效果相當於合並上面 2 個命令。
  • git merge <branch_name> : 將 <branch_name> 分支合並到當前所在的分支上
  • git branch -d <branch_name> : 將 <branch_name> 分支刪除
  • git branch -D <branch_name> : 將 <branch_name> 分支強制刪除。如果 <branch_name> 分支存在未合並的代碼時,那么用 -d 是刪除不了。

1.3 標簽相關的命令

  • git tag : 查看歷史 tag 記錄。
  • git tag <tag_name> <commit_id> : 在指定提交 id 上創建一個 tag。如果不寫 <commit_id> ,那就在最新的 commit 上創建一個 tag。
  • git checkout <tag_name> : 切換到 <tag_name> 標簽
  • git show <tag_name> : 查看標簽信息
  • git tad -d <tag_name> : 刪除標簽
  • git push origin <tag_name> : 將某個標簽推送到遠程倉庫
  • git push origin :refs/tags/<tag_name> : 可以刪除一個遠程標簽。

1.4 SSH

提前申明, windows 系統並不自帶 SSH, 但是安裝的 Git 中帶有 SSH。所以以下命令請在 Git bash 下執行。

  • ssh-keygen -t rsa : 指定 rsa 算法生成密鑰。
  • ssh -T git@github.com : 測試 ssh 是否成功添加到 github 中

1.5 Github 操作

  • git clone ... : 將 github 項目復制到本地的當前目錄
  • git push origin <本地分支>:<遠程分支> : 把本地分支中本地代碼同步到遠程分支
  • git pull orgin <branch_name> : 把遠程 <branch_name> 分支的最新的代碼同步到本地當前分支中
  • get remote add origin git@github.com:xxx/xxxx.git : 將當前本地倉庫與遠程進行聯接
  • git remote -v : 查看我們當前項目有哪些遠程倉庫

1.6 補充命令

  • alias 別名

    • git config --global alias.<別名> "<原命令>"。比如 git config --global alias.c "checkout",之后 git c == git checkout
  • diff

    • git diff : 比較工作區文件和暫存區文件差異。如果加上文件名,就僅比較這個文件在工作區與暫存區的區別
    • git diff <commit_id1> <commit_id2> : 比較兩次提交之間的差異
  • checkout

    • 作用 1 :切換分支、標簽以及 commit。本質是「用某個 HEAD 中的最新內容替換掉你的工作區中的文件」。切換時,暫存區的內容不受影響但相當於在切換前執行了 git stash
    • 作用 2 :撤銷還沒進入暫存區的修改的作用。舉個例子,假設我們在一個分支開發一個小功能,剛寫完一半,這時候需求變了,而且是大變化,之前寫的代碼完全用不了了,好在你剛寫,甚至都沒有 git add 進暫存區,這個時候很簡單的一個操作就直接把原文件還原:git checkout a.md,本質上是將 HEAD 內容覆蓋掉工作區的內容。注意,checkout 命令只能撤銷還沒有 add 進暫存區的文件。
  • stash

    • 作用:把當前分支中的工作區的所有修改先暫存到棧上。
    • 運用場景:假設我們正在一個新的分支做新的功能,這個時候突然有一個緊急的bug需要修復,而且修復完之后需要立即發布。當然你說我先把剛寫的一點代碼進行提交不就行了么?這樣理論上當然是ok的,但是這會產品垃圾commit,原則上我們每次的commit都要有實際的意義,你的代碼只是剛寫了一半,還沒有什么實際的意義是不建議就這樣commit的,那么就用 git stash 保留。
    • git stash : 把當前分支所有沒有 commit 的代碼先暫存起來
    • git stash list : 查看所有 stash 記錄
    • git stash apply : 將暫存的代碼還原
    • git stash drop : 把最近一條 stash 記錄刪除。注意:每次還原代碼后,最好刪除這條 stash 記錄
    • git stash pop == git stash apply + git stash drop
    • 注意:執行了 git add 的數據在切換分支時,會自動暫存一起。本質上是因為切換分支不影響暫存區的數據。但需要手動恢復。

二、常用概念

2.1 工作區、暫存區與 HEAD

  • 工作區就是你還沒有執行 git add 的文件,它持有實際文件;
  • 暫存區就是你執行了 git add 但沒執行 git commit 的文件,它像個緩存區域,臨時保存你的改動;
  • HEAD 就是你執行完 git commit,它指向你最后一次提交的結果並且清空暫存區。
 
工作區、暫存區與 HEAD 參考:http://rogerdudler.github.io/git-guide/index.zh.html

在實際中,工作區有一個隱藏目錄 .git ,它不屬於工作區,而是 Git 的版本庫。Git 的版本庫里存了很多東西,其中最重要的就是稱為 stage(或者叫 index )的暫存區,還有 Git 為我們自動創建的第一個分支
master ,以及指向master的一個指針叫 HEAD。

 
實際目錄中,三種狀態的聯系 參考:https://www.liaoxuefeng.com

與此同時,History 保存着所有分支信息,HEAD 指針指向當前分支。

 
三種狀態的聯系(更詳細版)[3]
 
三種狀態之間的轉換及其命令 [3]

上述命令有待驗證。

2.2 分支 branch

stormzhang 從0開始學習 GitHub 系列之「團隊合作利器 Branch」

2.3 標簽 tag

本質:標簽作用於提交上,可以看成是某個提交的別稱。

運用:主要用於標記軟件的版本號。

2.4 SSH

簡單點說,SSH是一種網絡協議,用於計算機之間的加密登錄。目前是每一台 Linux 電腦的標准配置。而大多數 Git 服務器都會選擇使用 SSH 公鑰來進行授權,所以想要在 GitHub 提交代碼的第一步就是要先添加 SSH key 配置。

命令生成的密鑰會存放在兩個文件 id_rsaid_rsa.pub ,而 id_rsa 是私鑰,id_rsa.pub 就是公鑰。這兩文件默認分別在如下目錄里生成:

Linux/Mac 系統 在 ~/.ssh 下,win系統在 /c/Documents and Settings/<username>/.ssh 下,都是隱藏文件,相信你有辦法查看的。

接下來要做的是把 id_rsa.pub 的內容添加到 GitHub 上,這樣你本地的 id_rsa 私鑰跟 GitHub 上的 id_rsa.pub 公鑰進行配對,授權成功才可以提交代碼。

2.5 Github 操作

Push

如果你本地代碼有更新,那么就需要把本地代碼推到遠程倉庫,這樣本地倉庫跟遠程倉庫就可以保持同步了。

Pull

如果遠程倉庫有更新,那么需要把遠程倉庫的最新代碼更新到本地,然后保證兩端代碼的同步。一般我們在 push 之前都會先 pull ,這樣不容易沖突。

先有遠程倉庫,后有本地倉庫:Clone

使用 git clone 命令,將遠程倉庫復制到本地中。然后,修改本地倉庫並進行 git commit。然后,git pull orgin <遠程分支> 建立本地倉庫和遠程倉庫之間聯系以及保持同步。最后,git push origin <本地分支>:<遠程分支> 將本地倉庫的修改提交到遠程倉庫中

通過 git clone 命令復制的倉庫,不需要使用 git init 初始化,同時也不需要聲明與遠程倉庫關聯(因為已經聲明了)。

先有本地倉庫,后有遠程倉庫:關聯本地已有項目

如果我們本地已經有一個完整的 git 倉庫,並且已經進行了很多次 commit ,我們想將本地倉庫提交到 github 上。

假設本地倉庫 test2,要提交到 github test 項目中,一般步驟是:

  1. 在 github 創建 test 項目
  2. 在 test2 目錄中輸入 git remote add origin git@github.com:xxxx/test.git 將本地 test2 項目與 github 的 test 項目關聯起來
  3. git push origin master

合並操作:merge & rebase

git merge branch_agit rebase branch_a 的效果是一樣,都是將 branch_a 分支合並到當前的分支中。但兩者合並方式不同:rebase 跟 merge 的區別你們可以理解成有兩個書架,你需要把兩個書架的書整理到一起去,

  • 第一種做法是 merge ,比較粗魯暴力,就直接騰出一塊地方把另一個書架的書全部放進去,雖然暴力,但是這種做法你可以知道哪些書是來自另一個書架的;
  • 第二種做法就是 rebase ,他會把兩個書架的書先進行比較,按照購書的時間來給他重新排序,然后重新放置好,這樣做的好處就是合並之后的書架看起來很有邏輯,但是你很難清晰的知道哪些書來自哪個書架。

合並沖突

如果兩個分支 a,b 同時修改了同一個位置時,合並到 master 時就會報沖突。不管兩個分支合並的先后順序、中間是否還合並了其他的分支(即任何情況下),都會報沖突。發生沖突的地方,Git 會在發生沖突的位置使用 <<<<< 、======、>>>>> 標記出不同分支的內容。如

<<<<<<< HEAD  # HEAD 內容 Creating a new branch is quick & simple. ======= Creating a new branch is quick AND simple. >>>>>>> feature1 # feature1 分支的內容 

此時,你需要手動地進行正確的合並后,再 git add .git commit 就可以了。

2.6 Git 與 SVN 對比

 
Git 與 SVN 對比

Git 屬於分布式版本控制系統,而 SVN 屬於集中式。集中式版本控制只有中心服務器擁有一份代碼,而分布式版本控制每個人的電腦上就有一份完整的代碼。

參考:

  1. stormzhang 從 0 開始學習 GitHub 系列
  2. git - 簡明指南
  3. CS-Notes Github




鏈接:https://www.jianshu.com/p/3a437dbc6f2a
來源:簡書


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM