Git工作目錄主要分為:
1.工作區(qū) (git add ↓)
2.暫存區(qū) (git commit ↓)
3.對(duì)象庫
Git文件狀態(tài)
1.Git文件
已被版本庫管理的文件舞竿。
2.已修改
在工作目錄修改git文件
3.已暫存
對(duì)已修改的文件執(zhí)行Git暫存操作京景,將文件存入暫存區(qū)。
4.已提交
將已暫存的文件執(zhí)行Git操作骗奖,將文件存入版本庫中确徙。
Git常用命令
1 git init :
初始化一個(gè)版本庫。
2 git init --bare
創(chuàng)建一個(gè)裸庫执桌,沒有工作區(qū)鄙皇。主要用來存放存放。
3 git add <file>
可以將一個(gè)未被追蹤的文件(untracked)添加到版本庫的暫存區(qū)當(dāng)中(tracked)仰挣。
4 git status
查看版本庫狀態(tài)伴逸。
5 git rm --cached <file>
將文件從暫存區(qū)中移除”旌回退到已修改的狀態(tài)错蝴。不會(huì)丟棄內(nèi)容
6 git commit 或者 git commit -m "xxxxx"
將暫存區(qū)的文件添加到對(duì)象庫中。
7 git commit --amend -m 'xxxxxx'
替換掉上次提交commit的消息颓芭。
8 git config --global
配置全局信息顷锰。
9 git config --local
針對(duì)于特定的項(xiàng)目。
10 git checkout -- <file>
丟棄掉相對(duì)于暫存區(qū)中最后一次添加的文件內(nèi)容所做的變更亡问。
丟棄工作目錄當(dāng)中的修改官紫。(沒有執(zhí)行g(shù)it add前的所有操作)
11 git rm <file>
從對(duì)象庫刪除git中的文件,同時(shí)也會(huì)刪除本地文件玛界。(必須是commit的)
1.刪除了一個(gè)文件万矾。
2.將被刪除的文件納入到暫存區(qū)。
12 git checkout -- <file>
撤銷對(duì)工作區(qū)修改慎框;這個(gè)命令是以最新的存儲(chǔ)時(shí)間節(jié)點(diǎn)(add和commit)為參照良狈,覆蓋工作區(qū)對(duì)應(yīng)文件file;這個(gè)命令改變的是工作區(qū)
13 git reset HEAD -- <file>
清空add命令向暫存區(qū)提交的關(guān)于file文件的修改(Ustage)笨枯;這個(gè)命令僅改變暫存區(qū)薪丁,并不改變工作區(qū),這意味著在無任何其他操作的情況下馅精,工作區(qū)中的實(shí)際文件同該命令運(yùn)行之前無任何改變
14 git mv <source file> <target file>
重命名或者將文件進(jìn)行移動(dòng)严嗜。
實(shí)際是分為兩個(gè)步驟。創(chuàng)建一個(gè)新文件洲敢,并刪除舊文件漫玄。
15 git log 或者 git log -n(顯示最近n次更新)
查看提交歷史。
15.1 git log -p filename
查看指定文件的提交歷史
15.2 git log --author="A|B"
根據(jù)作者名稱查找的提交歷史
15.3 git log --grep="關(guān)鍵字"
根據(jù)關(guān)鍵字查找的提交歷史
15.4 git log -- a.txt
根據(jù)文件名查找的提交歷史
15.5 git log 分支名
查看別的分支的提交記錄
git log origin/master
git log remotes/origin/master
git log refs/remotes/origin/master
查看遠(yuǎn)程分支的提交記錄。
前兩種最終都會(huì)轉(zhuǎn)換為第三種進(jìn)行調(diào)用睦优。
15.6 git log origin/master A
查看遠(yuǎn)程分支下 A 的提交記錄(A可以是文件渗常,也可以是目錄)
16 git branch 或者 git branch -a
查看當(dāng)前版本庫中所有的分支
17 git branch new_branch
在當(dāng)前分支的基礎(chǔ)上創(chuàng)建新分支。
18 git checkout branch
切換分支汗盘。
19 git checkout -b new_branch
創(chuàng)建新分支并切換到新分支上皱碘。
20 git checkout -b [local_branch_name] origin/new_branch
從遠(yuǎn)程分支獲取到本地。origin/new_branch遠(yuǎn)程分支與遠(yuǎn)程服務(wù)器上的分支是相對(duì)應(yīng)的隐孽。
21 git branhch -d branch_name
刪除分支癌椿。(如果要?jiǎng)h除的分支與當(dāng)前分支的內(nèi)容沒有合并,不允許刪除菱阵。)
22 git branch -D branch_name
強(qiáng)制刪除分支踢俄。
23 git merge branch_name
將branch_name 分支上的修改合并到當(dāng)前的分支中。
FastForward
1.HEAD 指向的是當(dāng)前的分支送粱。
2.master(分支名)指向的是提交褪贵。
24 解決沖突
修改代碼后,需要調(diào)用 git add <file> 標(biāo)記為已經(jīng)解決沖突抗俄。
再執(zhí)行g(shù)it commit 標(biāo)識(shí)merge完成脆丁。
25. git merge -- no-ff branch_name
合并分支不適用FastForward,這樣會(huì)多出一個(gè)commitId动雹。
26 git reset --hard HEAD^^
或者 git reset --hard HEAD~2
或者 git reset --hard commit_id.
回退到某個(gè)版本槽卫。
27 git reflog
查看git操作記錄
28 git reset HEAD <file>
將之前添加到暫存區(qū)的內(nèi)容從暫存區(qū)移除到工作區(qū)。
29 git branch -m old_branch_name new_branch_name
修改分支名稱
30 git stash 或者 git stash save 'xxx'
將工作目錄的記錄進(jìn)行臨時(shí)保存胰蝠。
31 git stash list
查看臨時(shí)保存的列表歼培。
32 git stash pop
恢復(fù)臨時(shí)保存的信息。并刪除掉記錄茸塞。
33 git stash apply
恢復(fù)臨時(shí)保存的信息躲庄,但是并不刪除記錄。
34 git stash drop
刪除臨時(shí)保存的信息钾虐。
35 git tag tag_name
創(chuàng)建一個(gè)輕量級(jí)標(biāo)簽病往。
36 git tag -a tag_name -m 'xxxx'
創(chuàng)建一個(gè)帶有附注的標(biāo)簽
37 git tag -d tag_name
刪除標(biāo)簽斜筐。
38 git tag
查看所有標(biāo)簽。
39 git tag -l "v*"
查找標(biāo)簽。
40 git blame <file>
查看文件的修改記錄式曲。會(huì)顯示每一行是誰修改的吠谢,還有修改時(shí)間和commit_id诵姜。
41 git diff
比較工作區(qū)和暫存區(qū)文件的區(qū)別佩伤。
暫存區(qū)視為原始文件,工作區(qū)視為目標(biāo)文件济丘。
42 git diff commit_id
比較工作區(qū)與具體對(duì)象庫(版本庫谱秽、git commit后的)的差別。
對(duì)象庫視為原始文件,工作區(qū)視為目標(biāo)文件疟赊。
43 gif diff HEAD
比較工作區(qū)與當(dāng)前對(duì)象庫(版本庫辱士、git commit后的)的差別。
版本庫視為原始文件听绳,工作區(qū)視為目標(biāo)文件。
44 git diff --cached 或者 git diff --cached commit_id
比較暫存區(qū)和對(duì)象庫(版本庫异赫、git commit后的)的差別椅挣。
45 git remote add origin xxxx.git
這里的origin為一個(gè)別名,實(shí)際代表xxxx.git塔拳。
46 git push -u origin master
將本地的倉庫推送至遠(yuǎn)程的倉庫鼠证,并與之進(jìn)行關(guān)聯(lián)。
47 git remote show origin
查看遠(yuǎn)程版本庫信息靠抑。
48 git config --global alias.別名 要替代的命令
給指令起別名量九。
49 git push --set-upstream origin branch_name
1.將當(dāng)前的本地分支推送到遠(yuǎn)程。
2.在遠(yuǎn)程也創(chuàng)建一個(gè)名字叫跟他同名的分支颂碧。
3.并將它們的關(guān)系綁定起來荠列。遠(yuǎn)程分支為本地分支的上游分支。
50 gitt push--set-upstream origin develop/develop2
將本地分支develop推送至遠(yuǎn)程分支develop2载城。
51 git push origin :branch_name
刪除遠(yuǎn)程分支肌似。(將一個(gè)空分支推送到遠(yuǎn)程分支,冒號(hào)之前空格)
52 git push origin --delete branch_name
刪除遠(yuǎn)程分支诉瓦。
53 重命名遠(yuǎn)程分支
要想重命名遠(yuǎn)程分支川队。
1.需要先刪除遠(yuǎn)程分支。git push origin --delete branch_name
2.然后將本地分支改名睬澡。git branch -m old_branch new_branch
3.再將本地分支推送至遠(yuǎn)程分支固额。git push --set-upstream origin branch_name
54 push 和 pull
push 操作的完整命令是:
git push origin srcBranch:destBranch
srcBranch(本地分支)
destBranch(遠(yuǎn)程分支)
pull操作完整命令是:
git pull origin srcBranch:destBranch
srcBranch(遠(yuǎn)程分支)
destBranch(本地分支)
HEAD標(biāo)記符:HEAD文件是一個(gè)指向你當(dāng)前所在分支的引用標(biāo)識(shí)符。
55 git push origin tag_name
推送分支到遠(yuǎn)程煞聪。
56 git push origin --tag
把本地尚未推送到遠(yuǎn)程的標(biāo)簽都推送到遠(yuǎn)程斗躏。
57 git push origin --delete tag tag_name
刪除遠(yuǎn)程標(biāo)簽。
58 git remote purne origin
將本地?zé)o效的分支進(jìn)行刪除米绕。(如果遠(yuǎn)程分支已經(jīng)被刪除)
59
60 git submodule add A B
將遠(yuǎn)程分支A地址作為子倉庫瑟捣,然后在本地文件夾會(huì)創(chuàng)建B文件夾。并把A的源碼clone到B文件夾中栅干。
61 git submodule foreach git pull
遍歷每個(gè)submodule進(jìn)行pull操作
62 git submodule init
第一次獲取工程的時(shí)候迈套,需要在主工程執(zhí)行submodule的初始化操作。注冊
63 git submodule update --recursive
遞歸更新submodule
64 一次性獲取獲取主模塊和子模塊
git clone xxxx --recursive
65 刪除submodule
git rm --cache mymodule
rm -rf mymodule
git add commit -m 'remove'
git push
rm .gitmodule
git add .
git commit -m 'delete .gitsubmodule'
git push
66 通過subtree添加子工程
git remote add subtree-module xxxx.git(subtree-module為自定義的名稱碱鳞。主要就是將xxx.git賦值給它桑李,方便后面書寫)
git subtree add --prefix=subtree subtree-origin master
本地創(chuàng)建一個(gè)叫substree的目錄,并從subtree-origin對(duì)應(yīng)的地址拉取master的代碼。
67 git cheey-pick commit_id
將commit_id對(duì)應(yīng)的提交給應(yīng)用到到當(dāng)前分支贵白。
68 git rebase branch_name(建議只在本地分支使用)
git rebase 與 merge的功能類似率拒,但在git log可以看到有所區(qū)別。
實(shí)際上可以理解上禁荒,將一個(gè)分支上的修改應(yīng)用到另一個(gè)分支上猬膨。
69 rebase 沖突處理
1.解決沖突后,使用git add進(jìn)行添加標(biāo)記呛伴。
2.執(zhí)行g(shù)it rebase --continue勃痴。
3.git rebase --skip 可以跳過這個(gè)沖突,并保留現(xiàn)有分支的热康。
70 git rebase --abort
種植rebase沛申,分支會(huì)恢復(fù)到rebase開始之前的狀態(tài)。