實用git指令

實用git指令

本文以軟件構造實驗一中涉及到的git操作為基礎,結合git官方文檔總結了一些常用的git指令,以供需要時快速查看。實際工作中我們更多是想要解決眼前問題,比如”我想要克隆一個倉庫到本地該怎麼做”、”我要將我的代碼上傳到遠程倉庫怎麼做”、”我要修改遠程倉庫代碼怎麼做”這樣的問題,而查看一本詳細的git指令教程雖然全面詳細但是對於解決這些常見問題來說效率實在太低,而且對於一個連指令如何書寫的小白來說一次性講清背後原理實屬無用功,所以本文主要是想以應用頻率很高的git操作為切入點展開介紹,同時也為已經了解具體操作內涵只是忘記指令的人提供了簡要版操作說明,更高效解決問題。


clone

操作目的:

將遠程倉庫複製克隆到本地指定位置

簡要操作說明:

  • 打開cmd或git bash,使用cd命令進入想要將倉庫clone到的本地文件夾路徑
  • 使用指令git clone <倉庫的url>將倉庫clone到目標文件夾,使用git clone <倉庫的url> 新名字 將倉庫clone到目標文件夾並重命名為指定名稱。

詳細操作說明:

  • 打開cmd或Git Bash,使用cd命令進入想要將倉庫clone到的本地文件夾路徑:

    • cmd: cmd一進入默認在C盤中,如果目的文件夾不在C盤中則需要先進行切換磁盤操作,以切換到D盤為例,直接在cmd中輸入 D: 即可完成磁盤轉換(見下圖)
    • cmd: 然後使用cd指令進入目的文件夾位置即可(此處以目的文件夾在D->JavaProject->Lab為例)cd JavaProject\Lab注意在cmd中的路徑要使用’\’而非’/’(見下圖),這樣克隆下來的倉庫就會自動存儲在D/JavaProject/Lab中了
      image
      image
    • cmd: (當然,如果你手滑cd後面的路徑輸入錯了但已經進入了錯誤的位置,也無需關閉cmd重新來過,你可以使用指令cd.. 來退出返回至上一層)
      image
    • gitbush: 如果使用gitbush,則在gitbush下直接使用cd指令進入所在文件夾,同樣以D->JavaProject->Lab為例,與cmd下路徑輸入要求不同,使用’/’而非’\’,其次就是上來就要有/d表明進入D盤,指令:cd /d/JavaProject/Lab
      image
  • 找到準備clone的倉庫的http鏈接或ssh鏈接(如果使用ssh鏈接需要保證已經提前配置好ssh),查找url方法如下圖(以github上的一個倉庫為例進入倉庫首頁,點擊右方綠色的Code按鈕即可查看http或ssh鏈接,點擊鏈接右方的按鈕可自動複製)
    image
    image

  • 複製結束之後,返回cmd或Git Bash,輸入指令git clone <倉庫的url>將倉庫clone到目標文件夾,clone成功後就可以在D/JavaProject/Lab下找到名字為倉庫名稱的文件夾了,這個文件夾中就是倉庫中所有的內容了。(下圖以cmd操作為例)
    image
    image

    • 如果你不想將文件夾的名字是默認的倉庫名,第一種辦法當然是右鍵重命名,第二種方法就是使用指令git clone <倉庫的url> 新名字 將倉庫clone到目標文件夾並重命名為指定名稱,這裡我將原名為test的倉庫clone下來的文件夾命名為MyTest,這樣clone下來的倉庫文件夾名字自動設置為MyTest了。
      image
      image
      (如果使用上述操作報錯了多半是網絡原因連不上github,可以多試幾次或查找報錯解決方案)

init & add & commit & push

操作目的:

將本地倉庫上傳到遠程倉庫

簡要操作說明:

  • 打開cmd或Git Bash使用cd指令進入本地倉庫(也就是存儲所有項目文件的那個本地文件夾)所在位置
  • git init
  • git add .提交所有文件;或使用指令git add <file>提交單個文件
  • git commit -m "<description>"
  • git remote add <name> <http/ssh鏈接>與遠程倉庫建立鏈接,<name>處換成此鏈接名字即可,一般都命名為origin
  • git push <name> master : master合併分支

詳細操作說明:

  • 打開cmd或Git Bash使用cd指令進入本地倉庫(也就是存儲所有項目文件的那個本地文件夾)所在位置

    • cmd: cmd一進入默認在C盤中,如果目的文件夾不在C盤中則需要先進行切換磁盤操作,以切換到D盤為例,直接在cmd中輸入 D: 即可完成磁盤轉換(見下圖)
    • cmd: 然後使用cd指令進入目的文件夾位置即可(此處以目的文件夾在D->JavaProject->Lab為例)cd JavaProject\Lab注意在cmd中的路徑要使用’\’而非’/’(見下圖),這樣克隆下來的倉庫就會自動存儲在D/JavaProject/Lab中了
      image
      image
    • cmd: (當然,如果你手滑cd後面的路徑輸入錯了但已經進入了錯誤的位置,也無需關閉cmd重新來過,你可以使用指令cd.. 來退出返回至上一層)
      image
    • gitbush: 如果使用gitbush,則在gitbush下直接使用cd指令進入所在文件夾,同樣以D->JavaProject->Lab為例,與cmd下路徑輸入要求不同,使用’/’而非’\’,其次就是上來就要有/d表明進入D盤,指令:cd /d/JavaProject/Lab
      image
  • 輸入指令git init將原文件夾初始化為git倉庫,以本地倉庫TEST為例,其所在位置為D:/JavaProject/TEST這裡的init操作需要我們進入這個倉庫再進行,比如這個TEST倉庫中有兩個文件(以下在Git Bash下演示,也可以使用cmd)
    image
    image

  • 使用git add類指令指定所需文件進行追蹤,一般使用git add .):

    • git add -A :等價於git add -all提交所有變化
    • git add -u :等價於git add -update提交被修改(modified)和被刪除(deleted)的文件,不包括新文件(new)
    • git add . :提交新文件(new)和被修改(modified)文件,不包括被刪除(deleted)的文件,並根據.gitignore文件做過濾
    • git add * :不會根據.gitignore文件做過濾而是將任何文件都加入
    • git add <file> :提交單個指定文件<file>處換成指定文件名稱即可
      image
  • (此步可忽略)(可以使用指令git status查看當前文件夾中所有文件狀態,如果是紅色表示還沒被add到暫存區,綠色表示已經add到暫存區)
    image
    如果此時刪除一個文件”MagicSquare.java”再運行指令git status則出現
    image
    這裡仔細閱讀可以發現如果是誤刪了這個文件,那麼我們可以使用指令git restore <file>進行恢復
    image

  • 輸入指令git commit -m "<description>" 將修改從暫存區提交到本地庫:<description>處換位對此次提交的敘述即可,比如可以是“initial commit”,”second”,”for fifth commit”,”add a test”等等,總之就是為了之後查看此次提交時能根據描述想起此次操作信息即可。
    image

  • 連接遠程倉庫:使用git remote指令檢查現在已創建好的遠程鏈接,如果是第一次創建則使用該指令將沒有返回值,使用指令git remote add <name> <http/ssh鏈接>,<name>處換成此鏈接名字即可,沒有要求,自己命名,一般都命名為origin,<http/ssh鏈接>就換成你想要提交的倉庫的http/ssh鏈接即可,當然如果你想使用ssh鏈接就需要提前配置好相關設置,但好處是之後無需反覆輸入用戶名和密碼,更方便。查看相關鏈接方法如下圖。再使用指令git remote檢查一下是否已經創建好鏈接,如果創建好則該指令返回origin(或是你剛才的命名)
    image
    image

  • 使用指令git push類將本地庫分支推送到遠程倉庫分支:(按使用頻率排序,選擇所需指令即可)(如果之前鏈接使用的是http鏈接此時提交就需要你輸入用戶名和密碼,如果是ssh鏈接此時就無需輸入)

    • 如果所要提交到的遠程倉庫分支中的內容包含於本地倉庫分支中的內容,那麼你直接使用指令git push <name> <本地分支名>:<遠程分支名><name>就是之前你自己起的遠程連接名,一般是origin。具體指令例如可以是git push origin master:master該指令可將當前本地倉庫的master分支推送到遠程倉庫master分支中,如果遠程倉庫沒有master分支則會自動創建,你的提交到此為止。(這裡我又新創建了一個ssh鏈接對應的origin1,使用origin1進行上傳)點開github就可以在master分支中找到文件了
      image
      image

    • 如果所要提交到的遠程倉庫分支中的內容不包含於本地倉庫分支中的內容使用git push <name> master:master指令就會報錯,並提示你先pull下來再push,此時你有以下幾種選擇:
      image

      • git push -f origin master:master:不想pull下來,甚至不想要遠程分支內的所有內容,只想要把本地的push上去,那麼使用強制提交指令git push -f origin master:master將本地master分支強制提交成為遠程倉庫的master分支
      • git pull origin master:master:先提交本地修改git add . ,git commit -m "init",再pull下來git pull origin master:master,如果出現”Please enter a commit message to explain why this merge is necessary”可按esc鍵同時輸入:wq退出或按i鍵進入insert模式修改最上面黃色選中的信息,選擇不修改。
    • 幾種省略寫法:

      • git push origin master:指令git push origin <本地分支名>:<遠程分支名>中遠程分支名被省略,則表示將本地分支推送到與之存在追蹤關係的遠程分支(通常兩者同名),如果該遠程分支不存在則將會被新創建
      • git push origin :master:指令git push origin <本地分支名>:<遠程分支名>中本地分支名被省略,則相當於push一個空的本地分支到遠程分支,表示刪除該遠程分支master,等同於指令git push origin --delete master
      • git push origin:如果當前分支與遠程分支存在追蹤關係,則本地分支和遠程分支都可以省略,會將當前分支推送到對應分支上,當然如果你這麼寫系統會提示你把指令寫全,如果你每次都是提交到master分支上,可以輸入指令git push --set-upstream origin master只需輸一次這個指令,以後就都可以省略寫成git push origin而不會再提示你補全指令了

pull & fetch & merge

操作目的:

拉取遠程倉庫代碼至本地,將遠程倉庫代碼與本地倉庫代碼合併

簡要操作說明(拉取有權限的倉庫):

  • 打開cmd或Git Bash使用cd指令進入pull操作後想要存放的目標文件夾所在位置
  • git init:git pull要求必須連接遠程倉庫
  • git remote add <遠程主機名name> <http/ssh鏈接>:git pull要求必須連接遠程倉庫,<name>處換成此鏈接名字即可,一般都命名為origin
  • git pull <遠程主機名name> <遠程分支名>:<本地分支名>:<name>處換成此鏈接名字即可,一般都命名為origin,pull操作會自動fetch和merge,git pull = git fetch + git merge,如果本地倉庫已經修改與遠程倉庫不同但是不想更新本地倉庫與遠程保持一致,則需先git add . ,git commit -m "init",再pull下來git pull origin master:master如果出現”Please enter a commit message to explain why this merge is necessary”可按esc鍵同時輸入:wq退出或按i鍵進入insert模式修改最上面黃色選中的信息,選擇不修改。
    image

簡要操作說明(拉取無權限的倉庫):

(無權限倉庫拉取說白了就是clone)

  • 打開cmd或git bash,使用cd命令進入想要將倉庫拉取到的本地文件夾路徑
  • 使用指令git clone <倉庫的url>將倉庫clone到目標文件夾,使用git clone <倉庫的url> 新名字 將倉庫clone到目標文件夾並重命名為指定名稱。