git

Git教程--廖雪峰的官方網(wǎng)站

克隆一個(gè)倉庫本質(zhì)上就是僅僅從別的地方復(fù)制一份 .git 目錄。

“Untracked files” ?

“Changes to be committed”在暫存區(qū)域生成了快照,等待被提交。

“Changes not staged for commit” 表明文件已經(jīng)修改,但是還沒有放入暫存區(qū)域,也就是沒生成快照。如果現(xiàn)在進(jìn)行commit操作,只是將修改之前的文件快照提交到了git目錄。

一定記住:只有暫存區(qū)域的文件(即:文件狀態(tài)為“Changes to be committed”)才會(huì)被提交。

前面講了我們把文件往Git版本庫里添加的時(shí)候,是分兩步執(zhí)行的:

第一步是用git add把文件添加進(jìn)去,實(shí)際上就是把文件修改添加到暫存區(qū);

第二步是用git commit提交更改,實(shí)際上就是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支。


git init? ? git add readme.txt ? ? ?git commit -m "wrote a readme file"

初始化一個(gè)Git倉庫,使用git init命令。

添加文件到Git倉庫,分兩步:

第一步,使用命令git add ,注意,可反復(fù)多次使用,添加多個(gè)文件;

第二步,使用命令git commit,完成。

要隨時(shí)掌握工作區(qū)的狀態(tài),使用git status命令。

如果git status告訴你有文件被修改過,用git diff可以查看修改內(nèi)容。

git diff HEAD -- readme.txt命令可以查看工作區(qū)和版本庫里面最新版本的區(qū)別。


HEAD指向的版本就是當(dāng)前版本,因此,Git允許我們在版本的歷史之間穿梭,使用命令git reset --hard commit_id。

穿梭前,用git log可以查看提交歷史,以便確定要回退到哪個(gè)版本。

要重返未來,用git reflog查看命令歷史,以便確定要回到未來的哪個(gè)版本。


命令git checkout -- readme.txt意思就是,把readme.txt文件在工作區(qū)的修改全部撤銷,這里有兩種情況:

一種是readme.txt自修改后還沒有被放到暫存區(qū),現(xiàn)在,撤銷修改就回到和版本庫一模一樣的狀態(tài);

一種是readme.txt已經(jīng)添加到暫存區(qū)后,又作了修改,現(xiàn)在,撤銷修改就回到添加到暫存區(qū)后的狀態(tài)。

總之,就是讓這個(gè)文件回到最近一次git commit或git add時(shí)的狀態(tài)。

git checkout -- file命令中的--很重要,沒有--,就變成了“切換到另一個(gè)分支”的命令,我們在后面的分支管理中會(huì)再次遇到git checkout命令。


先有本地庫,后有遠(yuǎn)程庫的時(shí)候,如何關(guān)聯(lián)遠(yuǎn)程庫。

要關(guān)聯(lián)一個(gè)遠(yuǎn)程庫,使用命令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推送最新修改;

分布式版本系統(tǒng)的最大好處之一是在本地工作完全不需要考慮遠(yuǎn)程庫的存在,也就是有沒有聯(lián)網(wǎng)都可以正常工作,而SVN在沒有聯(lián)網(wǎng)的時(shí)候是拒絕干活的!當(dāng)有網(wǎng)絡(luò)的時(shí)候,再把本地提交推送一下就完成了同步,真是太方便了!

先創(chuàng)建遠(yuǎn)程庫,然后,從遠(yuǎn)程庫克隆。

git clone git@github.com:michaelliao/gitskills.git


Git鼓勵(lì)大量使用分支:

查看分支:git branch

創(chuàng)建分支:git branch

切換分支:git checkout

創(chuàng)建+切換分支:git checkout -b

合并某分支到當(dāng)前分支:git merge

刪除分支:git branch -d

用git log --graph命令可以看到分支合并圖。

通常,合并分支時(shí),如果可能,Git會(huì)用Fast forward模式,但這種模式下,刪除分支后,會(huì)丟掉分支信息。如果要強(qiáng)制禁用Fast forward模式,Git就會(huì)在merge時(shí)生成一個(gè)新的commit,這樣,從分支歷史上就可以看出分支信息。

git merge --no-ff -m?"merge with no-ff" dev


Git還提供了一個(gè)stash功能,可以把當(dāng)前工作現(xiàn)場“儲藏”起來,等以后恢復(fù)現(xiàn)場后繼續(xù)工作。當(dāng)手頭工作沒有完成時(shí),先把工作現(xiàn)場git stash一下,然后去修復(fù)bug,修復(fù)后,再git stash pop,回到工作現(xiàn)場。你可以多次stash,恢復(fù)的時(shí)候,先用git stash list查看,然后恢復(fù)指定的stash。


查看遠(yuǎn)程庫信息,使用git remote -v;

本地新建的分支如果不推送到遠(yuǎn)程,對其他人就是不可見的;

從本地推送分支,使用git push origin branch-name,如果推送失敗,先用git pull抓取遠(yuǎn)程的新提交;

在本地創(chuàng)建和遠(yuǎn)程分支對應(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,如果有沖突,要先處理沖突。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容