您好,登錄后才能下訂單哦!
Git 是一種分布式版本控制系統(tǒng)
創(chuàng)建版本庫(kù)
mkdir dirname 新建目錄
cd dirname
git init 把該目錄變成 Git 倉(cāng)庫(kù)
該目錄下有個(gè) .git 隱藏目錄,不要去改這個(gè)目錄里的文件
添加文件
git add filename.txt
把文件提交給倉(cāng)庫(kù)
git commit -m "xxx" -m后面輸入的是本次提交的說明
查看倉(cāng)庫(kù)當(dāng)前狀態(tài)
git status
比較修改了什么內(nèi)容
git diff filename.txt
查看提交的歷史
git log 命令顯示從最近到最遠(yuǎn)的提交日志
git log --pretty=oneline 每個(gè)版本只輸出一行(commit id 和 提交說明)
查看提交的命令歷史
git reflog
你看到的一大串字符是commit id(版本號(hào))
在Git中,用HEAD表示當(dāng)前版本,上一個(gè)版本是HEAD^,上上版本是HEAD^,往上前 n 個(gè)版本是 HEAD~n
git reset --hard HEAD^ 回退到上一版本
git reset --hard 版本號(hào) 到該commit id 號(hào)對(duì)應(yīng)的版本 commit id 可以不寫全,但一定要寫到 Git可以區(qū)分的程度
工作區(qū)和暫存區(qū)的概念
dirname 就是一個(gè)工作區(qū)
工作區(qū)里的隱藏目錄 .git ,不算工作區(qū),是 Git 的版本庫(kù)
Git的版本庫(kù)里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區(qū),
還有Git為我們自動(dòng)創(chuàng)建的第一個(gè)分支master,以及指向master的一個(gè)指針叫HEAD
git add命令實(shí)際上就是把要提交的所有修改放到暫存區(qū)(Stage),然后,執(zhí)行g(shù)it commit就可以一次性把暫存區(qū)的所有修改提交到分支。
Git 管理的是修改。你第一次修改 filename.txt 并執(zhí)行 git add ,把它提交到暫存區(qū),第二次修改 filename.txt 不添加,執(zhí)行 git commit
你會(huì)發(fā)現(xiàn)只有第一次的修改被提交了,第二次沒有被提交。 git commit 只負(fù)責(zé)暫存區(qū)中的內(nèi)容
每次修改,如果不add到暫存區(qū),那就不會(huì)加入到commit中
撤銷修改
場(chǎng)景1:當(dāng)你改亂了工作區(qū)某個(gè)文件的內(nèi)容,想直接丟棄工作區(qū)的修改時(shí),用命令git checkout -- filename
場(chǎng)景2:當(dāng)你不但改亂了工作區(qū)某個(gè)文件的內(nèi)容,還添加到了暫存區(qū)時(shí),想丟棄修改,分兩步,第一步用命令git reset HEAD filename(HEAD表示最新版本),就回到了場(chǎng)景1,
第二步按場(chǎng)景1操作。
場(chǎng)景3:已經(jīng)提交了不合適的修改到版本庫(kù)時(shí),想要撤銷本次提交,回退一個(gè)版本。
刪除文件
rm filename
Git 會(huì)記錄下來,使用 git status 會(huì)告訴你哪些文件被刪除了
如果確實(shí)要從版本庫(kù)中刪除,用 git rm 刪掉,并且要用 git commit
如果誤刪 用 git checkout -- filename git checkout其實(shí)是用版本庫(kù)里的版本替換工作區(qū)的版本,無(wú)論工作區(qū)是修改還是刪除,都可以“一鍵還原”。
要關(guān)聯(lián)一個(gè)遠(yuǎn)程庫(kù),使用命令git remote add origin git@server-name:path/repo-name.git;
關(guān)聯(lián)后,使用命令git push -u origin master第一次推送master分支的所有內(nèi)容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改
克隆一個(gè)倉(cāng)庫(kù),git clone 倉(cāng)庫(kù)的地址
查看分支: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命令可以看到分支合并圖。
git log --graph --pretty=oneline --abbrev-commit
分支策略
git merge --no-ff -m "merge with no-ff" dev
合并分支 加 --no--ff 表示以普通模式合并,-m 說明,合并后的歷史有分支,能看出來曾經(jīng)做過合并,
通常,合并分支時(shí),如果可能,Git 會(huì)使用Fast forward模式,而這種模式合并后看不出曾經(jīng)做過合并。
git stash
把當(dāng)前工作現(xiàn)場(chǎng)儲(chǔ)存起來,以后可以恢復(fù)現(xiàn)場(chǎng)繼續(xù)工作,像快照
git stash list 查看存的工作現(xiàn)場(chǎng)
恢復(fù)工作現(xiàn)場(chǎng)
git stash apply 恢復(fù),恢復(fù)后 stash 內(nèi)容不會(huì)刪除,需要用 git stash drop 來刪除
git stash pop ,恢復(fù)的同時(shí)把 stash 內(nèi)容也刪除
強(qiáng)制刪除一個(gè)沒有被合并過的分支
git branch -D <name>
查看遠(yuǎn)程庫(kù)信息,使用git remote -v;
本地新建的分支如果不推送到遠(yuǎn)程,對(duì)其他人就是不可見的;
從本地推送分支,使用git push origin branch-name,如果推送失敗,先用git pull抓取遠(yuǎn)程的新提交;
在本地創(chuàng)建和遠(yuǎn)程分支對(duì)應(yīng)的分支,使用git checkout -b branch-name origin/branch-name,本地和遠(yuǎn)程分支的名稱最好一致;
建立本地分支和遠(yuǎn)程分支的關(guān)聯(lián),使用git branch --set-upstream branch-name origin/branch-name;
從遠(yuǎn)程抓取分支,使用git pull,如果有沖突,要先處理沖突
創(chuàng)建標(biāo)簽
命令git tag <name>用于新建一個(gè)標(biāo)簽,默認(rèn)為HEAD,也可以指定一個(gè)commit id;
git tag -a <tagname> -m "blablabla..."可以指定標(biāo)簽信息;
git tag -s <tagname> -m "blablabla..."可以用PGP簽名標(biāo)簽;
命令git tag可以查看所有標(biāo)簽。
管理標(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)簽。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。