聲明:為友善描述: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的時候:
- git checkout 那個路徑下的檔案夾或者檔案名。(就能撤銷未添加的修改)
3:如果已經add過的檔案:
- git reset HEAD 那個路徑下的檔案夾或者檔案名。(就能回到未添加的狀态)
- 然後在用 1 中的方法撤銷修改。
==注意:如果你把某個檔案删除了,或者是新添加的檔案,都不會再恢複或者去掉,但是會把檔案中的添加的代碼去掉。==
5.如果已經commit過的檔案:
- git reset –hard HEAD^ 那麼如果要回退到上上個版本隻需把HEAD^ 改成 HEAD^^ 以此類推。那如果要回退到前100個版本的話,使用上面的方法肯定不友善,我們可以使用下面的簡便指令操作:git reset –hard HEAD~100 即可。
- ++不過還有一種比較實用的方法:
- reset –hard [你要回退的版本号] 這樣就能直接回退到你指定的那一次送出。++
- 例如:git reset –hard 852782f
5:可擷取到每次送出的版本号
- git reflog
二.已經push
粗暴的方法:(隻需兩行指令)
- git reset –hard 1243ad3(commit唯一辨別) 或者 git checkout (commit唯一辨別 前7位)
- git push origin HEAD –force (強行push)
6.删除
git branch -D A 删除分支A
rm fileName 删除檔案
7.配置
- git config – list 顯示目前的git配置
- git config -e [–global]編輯git配置檔案
- 設定送出代碼時的使用者資訊
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