Git倉庫
1.創(chuàng)建git倉庫
(1)git init:在現(xiàn)有目錄下初始化倉庫,再通過git add實(shí)現(xiàn)對(duì)指定文件對(duì)追蹤邮偎;
(2)git clone url:克隆現(xiàn)有的倉庫—自動(dòng)在當(dāng)前目錄下創(chuàng)建目錄且初始化一個(gè).git文件夾管跺,然后將從遠(yuǎn)程倉庫拉取下的數(shù)據(jù)放進(jìn).git文件夾,然后將最新版本的文件拷貝進(jìn)工作目錄禾进;
-
git倉庫的工作區(qū)
git項(xiàng)目的三個(gè)工作區(qū)域
(1)工作目錄
- 已跟蹤文件:從Git倉庫提取出文件豁跑,以供修改或使用;可通過git rm --cached xx不再跟蹤xx文件泻云,但xx文件仍存在在本地目錄中艇拍,只是不納入版本控制狐蜕;
- 未跟蹤文件:可通過git add將其變?yōu)橐迅櫸募?br>
(2)暫存區(qū):通過git add將已修改/未跟蹤的文件從工作目錄放入暫存區(qū);
(3)Git倉庫:對(duì)暫存區(qū)的文件使用git commit卸夕,提交修改馏鹤,保存最新版本的文件快照;
Git常見命令
1.git status [-s]
- git add xx
- 開始跟蹤新文件xx勃救;
- 將已跟蹤的修改過的文件xx放入暫存區(qū)碍讨;
- 將合并時(shí)發(fā)送沖突的文件標(biāo)記為已解決狀態(tài);
3.git commit
(1)git commit -m ‘xx’
(1)git commit -a -m 'xx':相當(dāng)于git add .+ git commit
撤銷&回滾
1.撤銷文件的修改
(1)git checkout -- <file> :撤銷對(duì)文件的修改— 將修改前的file文件覆蓋了該file蒙秒,此file的任何修改將會(huì)消失勃黍;
(2)git reset HEAD <file>:撤銷暫存區(qū)的文件,取消該文件的git add操作晕讲;
2.已commit但未push到遠(yuǎn)端
(1)git commit --amend [-m 'xxx']:將這次commit與上一次commit合為一個(gè)新的commit,即commit版本號(hào)會(huì)改變瓢省,但commit次數(shù)不變弄息;
- 提交新的修改但不增加一條新的commit記錄;
- 只單純更改commit的提交信息勤婚,若不寫則默認(rèn)使用上次的提交信息摹量;
(2)git reset --xx <commit-id / HEAD~n>:回退到commit-id版本/回退n個(gè)版本
-
git reset --soft <commit-id / HEAD~n>:回退到指定版本的commit狀態(tài),但保留了所有階段的git add操作馒胆;
解決提交分支錯(cuò)誤的問題 - git reset --mixed <commit-id / HEAD~n>: 回退到指定版本的commit狀態(tài)缨称,但工作目錄保留了修改,將目錄中所有的修改通過git add即與--soft的指令結(jié)果一樣
- git reset --hard <commit-id / HEAD~n>:回退到指定版本的commit狀態(tài)祝迂,不保留修改睦尽,可通過git reflog找到丟失的commit找回丟失的數(shù)據(jù)
3.commit之后已push到了遠(yuǎn)端:git revert
遠(yuǎn)程倉庫&分支
1.git remote:查看遠(yuǎn)程倉庫—列出每一個(gè)遠(yuǎn)程倉庫的簡(jiǎn)寫;
(1)git remote -v:顯示簡(jiǎn)寫+對(duì)應(yīng)的url型雳;
(2)git remote add <shortname> <url>:添加一個(gè)遠(yuǎn)程倉庫当凡,并為其指定一個(gè)簡(jiǎn)寫;
(3)git remote show <shortname>:查看該shortname對(duì)應(yīng)的遠(yuǎn)程倉庫的相關(guān)信息纠俭;
(4)git remote rename x1 x2:將簡(jiǎn)寫名x1改為x2宁玫;
(5)git remote rm xx:移除簡(jiǎn)寫名xx對(duì)應(yīng)的遠(yuǎn)程倉庫;
2.遠(yuǎn)程分支:(remote)/(branch) — 只要不與遠(yuǎn)程倉庫的服務(wù)器連接,本地的遠(yuǎn)程分支指針就不會(huì)移動(dòng)柑晒;
3.拉扰繁瘛:本地倉庫會(huì)自動(dòng)跟蹤對(duì)應(yīng)的遠(yuǎn)程分支
(1)git fetch 遠(yuǎn)程倉庫:從指定遠(yuǎn)程倉庫中拉取本地沒有的數(shù)據(jù),但不會(huì)合并到本地分支上匙赞;
(2)git pull [遠(yuǎn)程倉庫 遠(yuǎn)程分支]:git fetch+git merge — 查找當(dāng)前分支所跟蹤的服務(wù)器分支妖碉,從服務(wù)器抓取數(shù)據(jù)然后合并到本地分支;
(3)git pull --rebase [遠(yuǎn)程倉庫 遠(yuǎn)程分支]:git fetch+git rebase芥被;
[git pull & git pull --rebase]https://www.cnblogs.com/kevingrace/p/5896706.html
4.推送:git push 遠(yuǎn)程倉庫 本地分支:遠(yuǎn)程分支
5.跟蹤遠(yuǎn)程分支:git checkout -b 分支名 [remote/branch]:將遠(yuǎn)程倉庫的分支拉取到本地分支欧宜,并建立跟蹤連接—即在該跟蹤分支上輸入git pull,git能自動(dòng)識(shí)別去哪個(gè)服務(wù)器上抓取拴魄,合并到哪個(gè)分支冗茸;
6.刪除遠(yuǎn)程分支:git push 遠(yuǎn)程倉庫 --delete 分支名 — 刪除遠(yuǎn)程倉庫指定的遠(yuǎn)程分支;
git分支
1.創(chuàng)建分支
(1)git branch <分支名>:只是新建分支匹中,但不切換分支夏漱;
(2)git checkout -b <分支名>:新建并切換到該分支上;
2.分支切換:git checkout <分支名>—HEAD指針指向當(dāng)前所在分支顶捷,其隨著commit操作自動(dòng)向前移動(dòng)挂绰,切換分支即切換工作目錄;
3.分支的合并
(1)git merge <分支名>:將指定的分支合并到所在分支上服赎;
-
合并沖突:兩個(gè)分支對(duì)同一文件的同一部分進(jìn)行了不同的修改則會(huì)產(chǎn)生沖突葵蒂;
- 需要手動(dòng)去解決沖突,選擇要保留的最終內(nèi)容重虑;
- git add將其標(biāo)記為沖突已解決践付;
-
git commit完成合并提交;
目前三個(gè)分支
合并操作無需解決的分歧稱為“快進(jìn)“缺厉,直接指針向前移動(dòng)
mater與iss53有分叉荔仁,就會(huì)新建一個(gè)節(jié)點(diǎn)作為合并提交
(2)git rebase
-
合并沖突
- 手動(dòng)解決沖突+git add <沖突文件>+git rebase --continue:先處理沖突再繼續(xù)合并;
- 跳過:git rebase --skip
-
取消合并:git rebase --abort
將issue分支合并到master芽死,最后相當(dāng)于快進(jìn)合并
(3)git cherry-pick <commit-id>:選擇某個(gè)分支的一個(gè)或幾個(gè)commit進(jìn)行操作乏梁;
- 應(yīng)用場(chǎng)合
- 把弄錯(cuò)分支的提交移動(dòng)到正確的地方;
- 把其他分支的提交添加到現(xiàn)在的分支关贵;
- git cherry-pick <start-commit-id>...<end-commit-id>:一次性將一個(gè)連續(xù)的時(shí)間序列內(nèi)的commit進(jìn)行cherry-pick操作—不包含start-commit-id的commit遇骑;
- git cherry-pick <start-commit-id>^...<end-commit-id>:[左閉,右閉]的區(qū)間揖曾,即包含了start-commit和end-commit落萎;
- 合并沖突:手動(dòng)修改沖突 + git add .+git cherry-pick --continue;
(4)區(qū)別:比如兩個(gè)抽屜A與B都裝滿了衣服,現(xiàn)在想把B中的衣服裝入A中炭剪,則git merge是強(qiáng)制性的练链,拿起B(yǎng)就倒入A里,如滿了(沖突)再一并整理;而git rebase是一件一件根據(jù)一開始放入的順序從B往A中加,如滿了(沖突)你可以選擇處理這一件再繼續(xù)加寥殖,或跳過這一件车酣,或不再加了把A還原;
3.分支操作
(1)git branch:查看本地git倉庫已有的分支名+所在分支潮模;
(2)git branch -d 分支名:刪除本地分支
(3)git branch -vv:查看所有本地分支&本地分支與遠(yuǎn)程分支的關(guān)系