天天看點

git基本使用

聲明:為友善描述:A,B,C都代表“分支”或者說“倉庫”的名字
聲明:gitAddress  代表git位址
(例如:[email protected]/xxxx/xxx || 'https://git.com/xxxx/xxx')
           

幾個專用名詞的譯名:

  • Workspace : 工作區
  • Index / Stage : 暫存區
  • Repository : 本地倉庫
  • Remote : 遠端倉庫

1.建立代碼庫

git init 建立本地倉庫
git remote add origin gitAddress 本地庫“關聯”遠端庫
git remote remove origin 取消本地目錄下關聯的遠端庫
git clone gitAddress           從遠端倉庫克隆項目代碼
git clone -b C gitAddress   從遠端倉庫克隆“指定分支C”上的代碼           

2.增加/删除檔案

git add [file] 将指定檔案添加到暫存區
git add .       添加目前目錄下所有檔案
git add -p 添加每個變化前,都會要求确認;對于同一個檔案的多處變化,可以實作分次送出
git add -u 暫存修改的和删除的檔案,不包括新增加的檔案。
git add -A 暫存所有的檔案,包括新增加的、修改的和删除的檔案。
git rm [file1] [file2] … 删除工作區檔案,并且将這次删除放入暫存區
git rm –cached [file1 [file2]
(說法1:删除本地倉儲檔案,但不會删除檔案)
(說法2:停止追蹤指定檔案,但該檔案會保留在工作區)
git mv [file-original] [file-renamed] 改名檔案,并且将這個改名放入暫存區           

3.代碼送出

git commit -m “first commit” 送出暫存區到倉庫區
git commit [file1] [file2] … -m [message] 送出暫存區的指定檔案到倉庫區
git commit -a 送出工作區自上次commit之後的變化,直接到倉庫區
git commit -v 送出時顯示所有diff資訊
git commit –amend [file1] [file2] … 重做上一次的commit,并包括指定檔案的新變化
git commit –amend -m [message] 使用一次新的commit,代替上一次送出;如果代碼沒有任何新變化,則用來改寫上一次commit的送出資訊           

4.分支

git branch A 建立分支
git checkout -b A 建立分支A,并且切換到A分支上
git checkout B 切換到B分支上
git branch -a 檢視所有本地分支和遠端分支
git merge B 合并指定分支B到目前分支
git branch -d B 删除分支
git branch -D B 删除分支
git push origin –delete B 删除遠端分支B
git push origin :B 删除遠端分支B
git branch -dr [remote / branch] 也是删除遠端分支
git push origin 本地分支A:遠端分支A 将本地分支push到遠端分支 ,并且命名遠端分支的名字為A
git fetch origin 同步遠端倉庫
git push -u origin master 關聯後,使用該指令第一次推送 master 分支的所有内容,後續再推送的時候就可以省略後面三個參數了,其中參數 u 代表上遊(upstream)的意思。
git remote show <remoteName> 檢視本地分支和遠端分支的對應關系
git remote prune <remoteName> 修剪本地remote中不存在的遠端分支
git remote set-url <name> <url> 修改對應的遠端分支 
git rebase
Git會為你提供3個選擇來修複導緻沖突的送出(fa39187):
可以運作git rebase –abort來完全取消變基。這麼做會取消變基修改,并将分支置回到執行git rebase之前的狀态。
可以運作git rebase –skip來完全忽略該送出。這樣,有問題的送出所引入的變化就不會被添加到曆史中。
可以使用與合并沖突相同的标準步驟來解決沖突。
           

5.撤銷

一.尚未push

1. git checkout [file] 恢複暫存區的指定檔案到工作區
2:在還沒有add的時候:
  1. git checkout 那個路徑下的檔案夾或者檔案名。(就能撤銷未添加的修改)
3:如果已經add過的檔案:
  1. git reset HEAD 那個路徑下的檔案夾或者檔案名。(就能回到未添加的狀态)
  2. 然後在用 1 中的方法撤銷修改。

==注意:如果你把某個檔案删除了,或者是新添加的檔案,都不會再恢複或者去掉,但是會把檔案中的添加的代碼去掉。==

5.如果已經commit過的檔案:
  1. git reset –hard HEAD^ 那麼如果要回退到上上個版本隻需把HEAD^ 改成 HEAD^^ 以此類推。那如果要回退到前100個版本的話,使用上面的方法肯定不友善,我們可以使用下面的簡便指令操作:git reset –hard HEAD~100 即可。
  2. ++不過還有一種比較實用的方法:
  3. reset –hard [你要回退的版本号] 這樣就能直接回退到你指定的那一次送出。++
  • 例如:git reset –hard 852782f
5:可擷取到每次送出的版本号
  1. git reflog

二.已經push

粗暴的方法:(隻需兩行指令)
  1. git reset –hard 1243ad3(commit唯一辨別) 或者 git checkout (commit唯一辨別 前7位)
  2. git push origin HEAD –force (強行push)

6.删除

git branch -D A 删除分支A

rm fileName 删除檔案

7.配置

  1. git config – list 顯示目前的git配置
  2. git config -e [–global]編輯git配置檔案
  3. 設定送出代碼時的使用者資訊
git config [–global] user.name
git config [–global] user.email           

8.其他

git status 檢視目前送出(commit)狀态,例如:檔案有沒有被修改過

git diff [可選]fileName 檢視具體修改了什麼

git log 檢視下曆史記錄

git show 檢視最後一個 commit 的修改。

git stash 暫存修改

git stash pop 取回暫存修改

git push origin A 将代碼push到A遠端倉庫中(例如:git push origin matser 将代碼push到master遠端倉庫中)

git pull gitAddress origin A 将遠端倉庫A中的代碼,拉取到本地倉庫中           

在本地目錄下找到.git檔案

# ls -a 
. .. .git .gitignore H2

删除 .git 
# rm -rf .git

git rm #删除檔案 
git rm filename

git mv #修改檔案名,或搬移目錄 
git mv filename newfilename           

常見問題:

1. 送出代碼或pull 代碼時,把如下的錯誤:
fatal: Unable to create ‘XXXXXX/.git/index.lock’: File exists.
解決辦法: 
找到index.lock 删除即可,例如:rm -f XXXXXX/.git/index.lock