工作區(qū) < - 緩沖區(qū) <- 版本庫(kù)
提交代碼的更改一共分2個(gè)階段版仔。
- 1.從工作目錄游盲,提交到stage。
- 2.從stage提交到master蛮粮。
從工作目錄提交到stage益缎,需要用add或者rm命令,只提交到stage然想,而沒有提交到master莺奔,是不會(huì)自動(dòng)同步到master的。
從stage提交到master用commit命令变泄。
兩種回退操作:
- 1.stage回退到工作目錄, 是用來取消提交操作的;
- 2.master回退到工作目錄, 是用來回滾操作的;
撤銷修改
git checkout -- xxx
讓這個(gè)文件回到最近一次git commit或git add時(shí)的狀態(tài)令哟。
git reset HEAD xxx
可以把暫存區(qū)的修改撤銷掉
- 場(chǎng)景1:當(dāng)你改亂了工作區(qū)某個(gè)文件的內(nèi)容,想直接丟棄工作區(qū)的修改時(shí)杖刷,用命令git checkout -- file励饵。
- 場(chǎng)景2:當(dāng)你不但改亂了工作區(qū)某個(gè)文件的內(nèi)容,還添加到了暫存區(qū)時(shí)滑燃,想丟棄修改役听,分兩步,第一步用命令git reset HEAD file表窘,就回到了場(chǎng)景1典予,第二步按場(chǎng)景1操作。
- 場(chǎng)景3:已經(jīng)提交了不合適的修改到版本庫(kù)時(shí)乐严,想要撤銷本次提交瘤袖,參考版本回退一節(jié),不過前提是沒有推送到遠(yuǎn)程庫(kù)昂验。
git init 初始化倉(cāng)庫(kù)
git add 添加文件
git commit -m "描述" 上傳文件
git status 查看狀態(tài)
git dif 查看區(qū)別
git reset --hard HEAD^ 恢復(fù)到上一個(gè)版本
git reset --hard HEAD^^ 恢復(fù)到上上一個(gè)版本
git reset --hard HEAD~100 恢復(fù)到100之前的版本
git log #查看當(dāng)前版本及之前版本的id 加--pretty=oneline簡(jiǎn)化顯示
git log --pretty=oneline
git reflog #查看所有版本的id
git reset --hard xxx 根據(jù)git reflog得到的編號(hào)恢復(fù)到那個(gè)版本
刪除文件
git rm xxx
git commit -m "remove test.txt"
刪除錯(cuò)誤要還原
git checkout -- xxx
git checkout其實(shí)是用版本庫(kù)里的版本替換工作區(qū)的版本捂敌,無論工作區(qū)是修改還是刪除,都可以“一鍵還原”既琴。
已有的本地倉(cāng)庫(kù)與之關(guān)聯(lián)
git remote add origin git@github.com:jianpingye/learngit.git
去除本地倉(cāng)庫(kù)與遠(yuǎn)程倉(cāng)庫(kù)的關(guān)聯(lián)
git remote rm origin
git push -u origin master本地庫(kù)的所有內(nèi)容推送到遠(yuǎn)程庫(kù)上 第一次
git push origin master本地庫(kù)的所有內(nèi)容推送到遠(yuǎn)程庫(kù)上
git clone克隆一個(gè)本地庫(kù)
git remote查看遠(yuǎn)程庫(kù)的信息
git remote -v 顯示更詳細(xì)的信息
git push origin branch-name從本地推送分支
git checkout -b branch-name origin/branch-name在本地創(chuàng)建和遠(yuǎn)程分支對(duì)應(yīng)的分支
git branch --set-upstream branch-name origin/branch-name建立本地分支和遠(yuǎn)程分支的關(guān)聯(lián)
創(chuàng)建分支
git checkout -b dev git checkout命令加上-b參數(shù)表示創(chuàng)建并切換占婉,相當(dāng)于以下兩條命令:
git branch dev 創(chuàng)建分支
git checkout dev 卻換分支
git branch命令查看當(dāng)前分支
git merge命令用于合并指定分支到當(dāng)前分支
git branch -d dev刪除分支
查看分支: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>
強(qiáng)行刪除:git branch -D <name>
分支沖突:合并時(shí)顯示分支沖突先merge 后修改<<<<分支1 <<<<分支2 之間的沖突內(nèi)容,然后在提交. 當(dāng)前分支會(huì)比被合并的分支多commit一次
git log --graph --pretty=oneline --abbrev-commit #查看分支情況
git merge --no-ff <name> #禁用Fast forward,不刪除分支,合并后保留分支
BUG分支:正在dev分支工作,需要修改bug并提交,應(yīng)該先把dev當(dāng)前工作區(qū)stash儲(chǔ)藏起來.修改完bug提交后在使用 git stash pop恢復(fù)dev的內(nèi)容到工作區(qū).
git stash #儲(chǔ)藏當(dāng)前工作區(qū)
git stash list #查看
git stash apply <stashid> #恢復(fù)指定內(nèi)容到工作區(qū),不在stash內(nèi)刪除..stashid通過git stash list查詢
git stash drop <stashid> #刪除
git stash pop #恢復(fù)stash的內(nèi)容到工作區(qū),并在stash內(nèi)刪除
git tag <name>新建一個(gè)標(biāo)簽,默認(rèn)為HEAD甫恩,也可以指定一個(gè)commit id逆济;
建帶有說明的標(biāo)簽,用-a指定標(biāo)簽名,-m指定說明文字
git tag -a <tagname> -m "blablabla..."可以指定標(biāo)簽信息奖慌;
可以通過-s用私鑰簽名一個(gè)標(biāo)簽:
git tag -s <tagname> -m "blablabla..."可以用PGP簽名標(biāo)簽抛虫;
git tag可以查看所有標(biāo)簽。
git push origin <tagname>可以推送一個(gè)本地標(biāo)簽简僧;
git push origin --tags可以推送全部未推送過的本地標(biāo)簽建椰;
git tag -d <tagname>可以刪除一個(gè)本地標(biāo)簽;
git push origin :refs/tags/<tagname>可以刪除一個(gè)遠(yuǎn)程標(biāo)簽涎劈。
更新
git fetch:相當(dāng)于是從遠(yuǎn)程獲取最新版本到本地广凸,不會(huì)自動(dòng)merge
git fetch origin master
git log -p master..origin/master
git merge origin/master
首先從遠(yuǎn)程的origin的master主分支下載最新的版本到origin/master分支上
然后比較本地的master分支和origin/master分支的差別
最后進(jìn)行合并
git pull:相當(dāng)于是從遠(yuǎn)程獲取最新版本并merge到本地
git pull origin master
上述命令其實(shí)相當(dāng)于git fetch 和 git merge
在實(shí)際使用中阅茶,git fetch更安全一些
因?yàn)樵趍erge前蛛枚,我們可以查看更新情況,然后再?zèng)Q定是否合并