2021/5/21 更新
add , commit(更新到本地倉庫:.git下),push(推送到遠(yuǎn)程相同名稱的分支下,例如local/Test - > origin/Test)
Merge(與其他分支合并,選用No Fast forward,能看到新建立的節(jié)點(diǎn)信息)
操作都是在本地操作
pull會(huì)拉取遠(yuǎn)程相同名稱的分支,例如local/Test - > origin/Test
更新遠(yuǎn)程分支信息 GIt->Fetch
測(cè)試demo:https://gitee.com/shawnday/Hello-Word
了解git
1.集中式VS分布式
集中式 (CVS,SVN)

必須要聯(lián)網(wǎng),版本庫集中存放在中央服務(wù)器,干活時(shí)都用自己的電腦。
分布式(Git)

無需聯(lián)網(wǎng),每個(gè)人電腦上都是一個(gè)完整的版本庫。多人協(xié)作不同電腦只需把自己的修改推送給對(duì)方。
2.安裝Git(Windows)
->全默認(rèn)
至最后
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
3.創(chuàng)建倉庫
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
3.添加文件并提交文件
初始化一個(gè)Git倉庫,使用git init命令。
添加文件到Git倉庫,分兩步:
使用命令git add <file>,注意,可反復(fù)多次使用,添加多個(gè)文件;
使用命令git commit -m <message>,完成。
$ git add readme.txt
$ git commit -m "append GPL"
[master 1094adb] append GPL
1 file changed, 1 insertion(+), 1 deletion(-)
3.查看
$ git status //可隨時(shí)掌握工作區(qū)狀態(tài)
$ git diff //可查看修改內(nèi)容
4.時(shí)空穿梭
HEAD指向的版本就是當(dāng)前版本,因此,Git允許我們?cè)诎姹镜臍v史之間穿梭,使用命令
$ git reset --hard commit_id。
穿梭前,用git log可以查看提交歷史,以便確定要回退到哪個(gè)版本。
要重返未來,用git reflog查看命令歷史,以便確定要回到未來的哪個(gè)版本。
4.工作區(qū)與暫存區(qū)

5.修改管理
直接丟棄工作區(qū)修改,用 git checkout--file
已在暫存區(qū),1.用git reset HEAD <file> 2.git checkout--file
已經(jīng)commit(前提是沒有推送到遠(yuǎn)程庫),版本退回
其中,git rm <file>不僅刪除了文件,還添加到了暫存區(qū)。
rm <file> 只刪除了工作區(qū)的文件。
5.創(chuàng)建SSH key
$ ssh-keygen -t rsa -C "youremail@example.com"
關(guān)聯(lián)一個(gè)遠(yuǎn)程庫(例如github),使用命令
$ git remote add origin git@github.com:michaelliao/learngit.git
關(guān)聯(lián)后,使用命令
$ git push -u origin master
第一次推送master分支所有內(nèi)容
此后,每次推送最近修改使用如下命令:
$ git push origin master
6.克隆倉庫
要克隆一個(gè)倉庫,首先必須知道倉庫的地址,然后使用git clone命令克隆。
Git支持多種協(xié)議,包括https,但通過ssh支持的原生git協(xié)議速度最快。
$ git clone git@github.com:michaelliao/gitskills.git
7.分支指令
查看分支:git branch
創(chuàng)建分支:git branch <name>
切換分支:git checkout <name>
創(chuàng)建+切換分支:git checkout -b <name>
合并某分支至當(dāng)前分支:git merge <name>
刪除分支:git branch -d <name>
查看分支合并圖:git log --graph
當(dāng)Git無法自動(dòng)合并分支時(shí),就西部首先解決沖突。解決沖突后,再提交,合并完成。
8.存儲(chǔ)工作現(xiàn)場(chǎng)
手頭工作未完成時(shí),先把工作現(xiàn)場(chǎng)git stash一下,去修復(fù)bug,修復(fù)后,再git stash pop,回到工作現(xiàn)場(chǎng)。
與IDEA集成
最近工作的時(shí)候,一開始直接在master分支上進(jìn)行了修改,忘記從master分支上拉一個(gè)分支下來了。在我直接checkout 分支(a)的時(shí)候,發(fā)現(xiàn)默認(rèn)還未add或commit/push的文件改動(dòng)(包括斷點(diǎn)等的設(shè)置)直接帶到切換后的分支(a)上。在我這個(gè)分支commit和push后,我切換回master,發(fā)現(xiàn)master還原了。就很奇怪。 經(jīng)過實(shí)驗(yàn),只要commit之后,master等就會(huì)復(fù)原到?jīng)]有add的情況下。
IDEA 幫助文檔提供了切換分支時(shí)的選項(xiàng)說明;

本地分支切換的時(shí)候(例如A切到B),會(huì)彈出來Restore workspace on branch switching 對(duì)話框,如果選擇是的話,在切換分支的時(shí)候,你在當(dāng)前分支(A)所做的一些還未add或commit/push的文件改動(dòng)(包括斷點(diǎn)等的設(shè)置)會(huì)帶到切換后的分支(B)上;
如果本地工作空間沒有uncommitted changes, 分支會(huì)順利切換
如果本地工作空間(分支A)有些文件會(huì)被分支B改動(dòng),IDEA會(huì)彈出對(duì)話框,讓你選擇Force Checkout 或 Smart Checkout;
如果選擇Force Checkout, 本地工作空間(分支A)的一些未提交的修改會(huì)被覆蓋(被分支B覆蓋),會(huì)有很大可能丟代碼!!!
如果選擇Smart Checkout,IDEA會(huì)先執(zhí)行stash命令,貯存這些未提交的修改,然后checkout 到分支B,在切換到分支B后,unstash 這些修改,所以A分支本地的這些修改會(huì)帶到B分支上。