Git基本命令使用詳解

目前你們接觸到最多的版本控制工具就是Svn和Git,Git是目前世界上最早進的分佈式版本控制系統,其實 Git 跟 SVN同樣有本身的集中式版本庫或服務器,可是Git 更傾向於被使用於分佈式模式,也就是每一個開發人員從中心版本庫/服務器上chect out代碼後會在本身的機器上克隆一個跟中心版本庫如出一轍的本地版本庫;git


Git本地配置

  • 查看當前配置: git config --listbash

  • 修改 git 的 name 和 email :服務器

    • git config --global user.name <name>app

    • git config --global user.email <email>ssh


SSH Key 密鑰生成

許多 Git 服務器都使用 SSH 公鑰進行認證。 爲了向 Git 服務器提供 SSH 公鑰,若是某系統用戶還沒有擁有密鑰,必須事先爲其生成一份。 這個過程在全部操做系統上都是類似的。 首先,你須要確認本身是否已經擁有密鑰。 默認狀況下,用戶的 SSH 密鑰存儲在其 ~/.ssh 目錄下。 進入該目錄並列出其中內容,你即可以快速確認本身是否已擁有密鑰:分佈式

$ cd ~/.ssh
$ ls
authorized_keys2  id_dsa       known_hosts
config            id_dsa.pub複製代碼


咱們須要尋找一對以 id_dsaid_rsa 命名的文件,其中一個帶有 .pub 擴展名。 .pub 文件是你的公鑰,另外一個則是私鑰。 若是找不到這樣的文件(或者根本沒有 .ssh 目錄),你能夠經過運行 ssh-keygen 程序來建立它們。在 Linux/Mac 系統中,ssh-keygen 隨 SSH 軟件包提供;在 Windows 上,該程序包含於 MSysGit 軟件包中。ide

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/schacon/.ssh/id_rsa):
Created directory '/home/schacon/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/schacon/.ssh/id_rsa.
Your public key has been saved in /home/schacon/.ssh/id_rsa.pub.
The key fingerprint is:
d0:82:24:8e:d7:f1:bb:9b:33:53:96:93:49:da:9b:e3 schacon@mylaptop.local

複製代碼

而後進行第一步操做,打開~/.ssh目錄下的公鑰文件
工具

$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU
GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3
Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA
t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En
mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx
NrRFi9wrf+M7Q== schacon@mylaptop.local複製代碼

將公鑰內容複製下來,而後在託管項目的GitLab服務器上添加SSH KEY,具體怎麼添加能夠百度搜索一下,就幾部而已,在此不加說明;
fetch


工程克隆、下載

  • git clone 遠程工程:git clone https://xxxxxxx.gitui

  • git fetch 把全部遠程分支更新到本地

  • git fetch origin <originName> :<localName> :把遠程對應分支更改更新到本地分支


經常使用命令彙總:

注意:在Git中HEAD 指向的版本是當前版本,^ 表示上一個版本,~N 表示上N個版本;


分支操做:

  • 查看分支:git branch

  • 查看遠程全部分支:git branch -r

  • 查看本地和遠程全部分支:git branch -a

  • 建立分支:git branch <name>

  • 切換分支:git checkout <name>

  • 建立並切換分支:git checkout -b <name>

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

  • 刪除本地分支:git branch (-d | -D) <name>

  • 刪除遠程分支:git push origin -d <name>

  • 分支重命名:git branch (-m | -M) <oldbranch> <newbranch>

注意: 不能刪除當前所在本地分支。


  • 查看當前分支本地修改:git status

  • 查看分支的commit信息(倒敘排列)

    • git log 查看commit id, Author, Date, commit info

    • git shortlog 按提交者分類顯示提交信息

    • git log --oneline 只輸出commit id 和 commit info

    • git log --stat 查看增刪查改了哪些文件



文件的添加、提交、拉取、推送、合併

  • 添加新增文件到暫存區:git add xx

  • 添加全部新增文件到暫存區:git add .

  • 撤銷暫存區的更改: git reset xx ;
  • 撤銷全部暫存區的更改: git reset HEAD
  • 清除工做空間文件:git checkout xx
  • 清除全部工做區文件:git checkout .
  • 暫存變動文件:git stash save "暫存備註"

  • 恢復暫存文件(並將暫存彈出棧):git stash pop (stash@{x})

  • 恢復暫存文件(繼續保存在棧空間):git stash apply (stash@{x})
  • 查看stash記錄:git stash list
  • 清除全部stash記錄:git stash clear
  • 提交變動文件:git commit -m "變動備註"

  • git pull origin xx:xx 從遠程獲取xx分支的更新到本地xx並merge
       等同於 :
    • git fetch origin xx
    • git checkout xx (-b )
    • git merge origin/xx


  • git push origin <currentName>:<currentName> 把本地分支<currentName>推送到遠程<remoteName>分支,遠程沒有則建立

  • git push --set-upstream origin xx 本地分支與遠程分支進行關聯追蹤
  • 推送到遠程:git push origin <name>

  • 比對兩個分支:git diff <name1> <name2>

  • 比對本地和遠程分支:git diff <name> origin/<name>

  • 合併某個分支:git merge <name>

  • 將一個feature分支變基到master分支:
    • git checkout feature
    • git rebase master
  • 基於遠程分支dddd建立新分支:git checkout -b xxxx origin/dddd
  • 強制更新吧本地xx分支更新到服務器分支xx:git push -f  origin xx : xx


注意:通常git pull 操做至關於先拉取遠程分支變化,而後自動merge ,等同於:git fetch 而後checkout當前分支再 merge 一下;



版本回退

  • 回退到上一版本:git reset --hard HEAD^

  • 回退到上上版本:git reset --hard HEAD^^

  • 回退到上上版本:git reset --hard HEAD~2

  • 回退到某個版本:git reset --hard <commit id>

注:慎用hard回滾,回滾後的代碼與前一次commit提交保持一致,暫存區全部內容清除,也能夠結合使用soft和mixed兩種方式,根據本身實際狀況操做;

  • 強制推送到遠程分支:git push -f  (該命令慎用,尤爲在服務器主開發分支上操做)

相關文章
相關標籤/搜索