配置SSH公鑰
使用 SSH 公鑰可讓電腦和碼雲通信(我倉庫放在碼雲)的時候使用安全鏈接(Git 的Remote要使用 SSH 地址)。詳見。java
- 碼雲--->設置--->安全設置--->ssh公鑰,先寫個公鑰的標題
- ssh-keygen -t rsa -C 'your email' ,生成 ssh key
- ~/.ssh/id_rsa.pub ,獲取到你的 public key
- 複製生成的 public key 添加到步驟 1 倉庫中
- ssh -T git@gitee.com ,首次使用須要確認並添加主機到本機 SSH 可信列表。若返回 Hi XXX! You've successfully authenticated ,則證實添加成功。
Git配置多個SSH-Key
當有多個 git 帳號時,好比:git
- 一個 gitee,用於公司內部的工做開發;
- 一個 github,用於本身進行一些開發活動;
詳見。github
初操做---設置用戶名
- git config --global user.name "any name" //設置全局project的用戶名
- git config --global user.email "any email" //設置全局project的郵箱
- git config --global --list //查看當前用戶的全局配置 用戶名和郵箱
- 在VS Code中每次更新代碼都會要輸入帳號密碼,方便起見,能夠配置一下讓 git 記住密碼帳號。
- git config --global credential.helper store
創建遠程倉庫連接
- 若是是從服務器 clone 下來的代碼,會自動配置一個叫 origin 的遠程倉庫連接
- git remote -v // 查看配置的遠程倉庫連接
- git remote add <遠程倉庫名> <遠程倉庫url> //添加遠程庫連接
- git remote rm <遠程倉庫名> //移除遠程倉庫
- git remote rename <oldname> <new name> //遠程倉庫重命名
提交代碼過程
- 提交以前,須要 pull 一下,而後處理衝突
- git add -A //添加全部文件,也能夠只提交更改的文件 git add .
- git add . //添加更改的文件
- git commit -m "描述代碼信息"
- git push -u <遠程庫的名稱> <遠程庫的分支> // -u 表示指定<當前遠程庫> 爲默認遠程倉庫,之後就直接push,不用帶參數
- 若是你肯定遠程倉庫的分支上那些代碼都不須要了,那麼直接 push 後面加一個 -f ,強行讓本地分支覆蓋遠程分支
- git push <遠程倉庫名> <遠程庫的分支> -f
提交代碼出現衝突
- git push 會出問題,應該先pull 一下,可是 pull 的時候又可能會出現分支衝突,
- 這時可能因爲版本問題會報錯,可能遇到 refusing to merge unrelated histories 這個提示是由於兩個倉庫不一樣,發現 refusing to merge unrelated histories,沒法 pull。
- 要把兩個不一樣的項目合併,git 須要添加一句代碼 ,這句代碼是在 git 2.9.2 版本發生的,最新的版本須要添加 --allow-unrelated-histories。查看git 版本,git --version
- 假如咱們的遠程倉庫是 origin,分支是 master,那麼咱們須要這樣寫 git pull origin master --allow-unrelated-histories
- 而後再 git push -u <遠程庫的名稱> <遠程庫的分支>
拉取代碼出現衝突
- git pull 時本地文件和遠程服務器文件衝突,出錯信息以下:
- error: Your local changes to 'contextTempl.java' would be overwritten by merge. Aborting.
- Please, commit your changes or stash them before you can merge.
- 解釋:這個意思是說更新下來的內容和本地修改的內容有衝突,先提交你的改變或者先將本地修改暫時存儲起來。
- 在 VS Code 中,錯誤提示是:在簽出前 請清理存儲庫工做樹
- 在這種狀況下,您能夠將更改隱藏起來,而後執行git pull,而後解壓縮;
- git stash //先將本地修改存儲起來
- git pull //拉取遠程
- git stash pop //還原暫存內容
代碼克隆全部分支
git clone 只能 clone 遠程庫的 master 分支,沒法 clone 全部分支,解決方法去下:安全
- git clone http://xxx.xxx.com/project/.git ,這樣在git_work目錄下獲得一個project子目錄
- cd project
- git branch -a,列出全部分支名稱以下:remotes/origin/dev remotes/origin/release
- git checkout -b dev origin/dev ,做用是 checkout 遠程的 dev 分支,在本地起名爲 dev 分支,並切換到本地的 dev 分支
- git checkout -b release origin/release,做用參見上一步解釋
- git checkout dev,切換回 dev 分支,並開始開發。
分支操做
查看分支:git branch
ruby
建立分支:git branch <name>
服務器
切換分支:git checkout <name>
ssh
建立+切換分支:git checkout -b <name>
fetch
合併某分支到當前分支:git merge <name>
url
刪除分支:git branch -d <name>spa
指令簡寫
-d --delete:刪除
-D --delete --force的快捷鍵
-f --force:強制
-m --move:移動或重命名
-M --move --force的快捷鍵
-r --remote:遠程
-a --all:全部
撤銷與恢復
- 若是誤刪了某文件,須要 git status 先看下工做區是否 commit 過,若是沒有 commit ,能夠看到刪除的文件名及路徑,是紅色的
- 直接從工做區拿刪除的文件 git checkout -- <path + file>
- 若是已經commit 了,那麼git status 看到的刪除的文件及路徑是綠色的,這時checkout 已經沒用了
- 能夠把暫存區的修改撤銷掉(unstage),git reset HEAD <path + file>,從新放回工做區,而後 git checkout -- <path + file> 取回
版本回退
遠程分支回退有三種方法:
- 本身的分支回滾直接用 reset
- 公共分支回滾用 revert
- 錯的太遠了直接將代碼所有刪掉,用正確代碼替代
本地分支版本回退:
- 先找到要回退的版本的 commit id ,git reflog
- 能夠根據commit id ,查看先前版本的信息,git log <commit id> 或者 git show <commit id>,退出git log 狀態,英文狀態下按q
- 回退版本 git reset --hard <commit id>
本身的遠程分支版本退回:
若是你的錯誤提交已經推送到本身的遠程分支了,那麼就須要回滾遠程分支了。
- git reflog
- git reset --hard <commit id>
- 而後強制推送到遠程分支,git push -f
- 本地分支回滾後,版本將落後遠程分支,必須使用強制推送覆蓋遠程分支,不然沒法推送到遠程分支
公共遠程分支回退:
回滾公共遠程分支和回滾本身的遠程分支是有區別的,若是你回退公共遠程分支,把別人的提交給丟掉了怎麼辦?
git fetch 和 git pull 的區別
- git fetch <遠程主機名> <分支名>;
- 最多見的命令如取回 origin 主機的 master 分支;
- git fetch origin master ,從遠程主機的master分支拉取最新內容;
- git merge FETCH_HEAD , 將拉取下來的最新內容合併到當前所在的分支中;
- git pull <遠程主機名> <遠程分支名>:<本地分支名>;
- git pull origin master , 若是遠程分支是與當前分支合併,則冒號後面的部分能夠省略;