Git 工具總結


配置SSH公鑰

  使用 SSH 公鑰可以讓電腦和碼雲通訊(我倉庫放在碼雲)的時候使用安全連接(Git 的Remote要使用 SSH 地址)。詳見

  1. 碼雲--->設置--->安全設置--->ssh公鑰,先寫個公鑰的標題
  2. ssh-keygen -t rsa -C 'your email'  ,生成 ssh key
  3. ~/.ssh/id_rsa.pub ,獲取到你的 public key
  4. 復制生成的 public key 添加到步驟 1 倉庫中
  5. ssh -T git@gitee.com ,首次使用需要確認並添加主機到本機 SSH 可信列表。若返回 Hi XXX! You've successfully authenticated ,則證明添加成功。

Git配置多個SSH-Key 

  當有多個 git 賬號時,比如:

  • 一個 gitee,用於公司內部的工作開發;
  • 一個 github,用於自己進行一些開發活動;

  詳見

初操作---設置用戶名

  1. git config --global user.name "any name"  //設置全局project的用戶名
  2. git config --global user.email "any email"  //設置全局project的郵箱
  3. git config --global --list   //查看當前用戶的全局配置   用戶名和郵箱
  4. 在VS Code中每次更新代碼都會要輸入賬號密碼,方便起見,可以配置一下讓 git 記住密碼賬號。
  5. git config --global credential.helper store 

建立遠程倉庫鏈接

  1. 如果是從服務器 clone 下來的代碼,會自動配置一個叫 origin 的遠程倉庫鏈接
  2. git remote -v  // 查看配置的遠程倉庫鏈接
  3. git remote add <遠程倉庫名> <遠程倉庫url>    //添加遠程庫鏈接
  4. git remote rm <遠程倉庫名>   //移除遠程倉庫
  5. git remote rename <oldname> <new name> //遠程倉庫重命名

提交代碼過程

  1. 提交之前,需要 pull 一下,然后處理沖突
  2. git add -A   //添加所有文件,也可以只提交更改的文件 git add .
  3. git add .   //添加更改的文件
  4. git commit -m "描述代碼信息"
  5. git push -u <遠程庫的名稱> <遠程庫的分支>  // -u 表示指定<當前遠程庫> 為默認遠程倉庫,以后就直接push,不用帶參數
  6. 如果你確定遠程倉庫的分支上那些代碼都不需要了,那么直接 push 后面加一個 -f ,強行讓本地分支覆蓋遠程分支
  7. git push <遠程倉庫名> <遠程庫的分支> -f 

提交代碼出現沖突

  1. git push 會出問題,應該先pull 一下,但是 pull 的時候又可能會出現分支沖突,
  2. 這時可能由於版本問題會報錯,可能遇到 refusing to merge unrelated histories 這個提示是因為兩個倉庫不同,發現 refusing to merge unrelated histories,無法 pull。
  3. 要把兩個不同的項目合並,git 需要添加一句代碼 ,這句代碼是在 git 2.9.2 版本發生的,最新的版本需要添加 --allow-unrelated-histories。查看git 版本,git --version
  4. 假如我們的遠程倉庫是 origin,分支是 master,那么我們需要這樣寫  git pull origin master --allow-unrelated-histories
  5. 然后再  git push -u <遠程庫的名稱> <遠程庫的分支>

拉取代碼出現沖突

  1. git pull 時本地文件和遠程服務器文件沖突,出錯信息如下:
  2. error: Your local changes to 'contextTempl.java' would be overwritten by merge.  Aborting.
  3. Please, commit your changes or stash them before you can merge.
  4. 解釋:這個意思是說更新下來的內容和本地修改的內容有沖突,先提交你的改變或者先將本地修改暫時存儲起來。
  5. 在 VS Code 中,錯誤提示是:在簽出前 請清理存儲庫工作樹
  6. 在這種情況下,您可以將更改隱藏起來,然后執行git pull,然后解壓縮;
  7. git stash  //先將本地修改存儲起來
  8. git pull  //拉取遠程
  9. git stash pop //還原暫存內容

代碼克隆所有分支

  git clone 只能 clone 遠程庫的 master 分支,無法 clone 所有分支,解決方法去下:

  1. git clone http://xxx.xxx.com/project/.git ,這樣在git_work目錄下得到一個project子目錄
  2. cd project
  3. git branch -a,列出所有分支名稱如下:remotes/origin/dev     remotes/origin/release
  4. git checkout -b dev origin/dev ,作用是 checkout 遠程的 dev 分支,在本地起名為 dev 分支,並切換到本地的 dev 分支
  5. git checkout -b release origin/release,作用參見上一步解釋
  6. git checkout dev,切換回 dev 分支,並開始開發。

分支操作

  查看分支:git branch

  創建分支:git branch <name>

  切換分支:git checkout <name>

  創建+切換分支:git checkout -b <name>

  合並某分支到當前分支:git merge <name>

  刪除分支:git branch -d <name>

指令簡寫

  -d    --delete:刪除

  -D   --delete --force的快捷鍵

  -f     --force:強制

  -m   --move:移動或重命名

  -M   --move --force的快捷鍵

  -r     --remote:遠程

  -a     --all:所有

撤銷與恢復

  1. 如果誤刪了某文件,需要 git status 先看下工作區是否 commit 過,如果沒有 commit ,可以看到刪除的文件名及路徑,是紅色的
  2. 直接從工作區拿刪除的文件 git checkout -- <path + file>
  3. 如果已經commit 了,那么git status 看到的刪除的文件及路徑是綠色的,這時checkout 已經沒用了
  4. 可以把暫存區的修改撤銷掉(unstage),git reset HEAD <path + file>,重新放回工作區,然后 git checkout -- <path + file> 取回

版本回退

  遠程分支回退有三種方法

  1. 自己的分支回滾直接用 reset
  2. 公共分支回滾用 revert
  3. 錯的太遠了直接將代碼全部刪掉,用正確代碼替代

  本地分支版本回退

  1. 先找到要回退的版本的 commit id ,git reflog 
  2. 可以根據commit id ,查看先前版本的信息,git log <commit id>  或者 git show <commit id>,退出git log 狀態,英文狀態下按q 
  3. 回退版本 git reset --hard <commit id> 

  自己的遠程分支版本退回

  如果你的錯誤提交已經推送到自己的遠程分支了,那么就需要回滾遠程分支了。

  1. git reflog
  2. git reset --hard <commit id>
  3. 然后強制推送到遠程分支,git push -f
  4. 本地分支回滾后,版本將落后遠程分支,必須使用強制推送覆蓋遠程分支,否則無法推送到遠程分支

  公共遠程分支回退

  回滾公共遠程分支和回滾自己的遠程分支是有區別的,如果你回退公共遠程分支,把別人的提交給丟掉了怎么辦?

git fetch 和 git pull 的區別

  1. git fetch <遠程主機名> <分支名>;
  2. 最常見的命令如取回 origin 主機的 master 分支;
  3. git fetch origin master ,從遠程主機的master分支拉取最新內容;
  4. git merge FETCH_HEAD , 將拉取下來的最新內容合並到當前所在的分支中;
  5. git pull <遠程主機名> <遠程分支名>:<本地分支名>;
  6. git pull origin master , 如果遠程分支是與當前分支合並,則冒號后面的部分可以省略;

 


免責聲明!

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



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