創(chuàng)建版本庫repository
mkdir f:/gitlearn
cd f:/gitlearn
git init
更新(新增磷籍、修改藏畅、刪除)文件到git倉庫
1 git add <file> #如果有多個文件雅倒,重復(fù)敲多行代碼
2 git commit -m "此次提交的說明" #提交
添加當(dāng)前目錄下的所有文件夾及文件 git add .(后面為“.”)
添加整個文件夾 git add directoryname/
刪除的另一種寫法:
1 如果非git刪除(手動拷邢、rm file)香府,使用git checkout -- file.txt即可恢復(fù)文件绽左,因為版本庫還存在文件
2 如果使用git rm file.txt悼嫉,且未執(zhí)行g(shù)it commit(此時,文件還在暫存區(qū))拼窥,想要恢復(fù)文件戏蔑,先執(zhí)行 git reset HEAD file.txt,再執(zhí)行g(shù)it checkout -- file.txt鲁纠,即可恢復(fù)文件
3 刪除版本庫的文件总棵,使用git rm file.txt,再執(zhí)行g(shù)it commit
查看當(dāng)前git倉庫狀態(tài)
git status #列出需要更新的文件
git diff readme.txt #并顯示更改的內(nèi)容
git log --pretty=oneline #查看日志
版本回退
git reset --hard HEAD^ #會退到上一個版本改含,^的個數(shù)表示上上...上個版本情龄,可以寫成HEAD~100,標(biāo)識退回到前100個版本
git reset --hard commit_id #根據(jù)版本id,讓當(dāng)前工作空間回退到某一個指定的版本捍壤,id可以不用寫全骤视,git會自動檢索,也有可能檢索到多個版本鹃觉,就不行了
總結(jié):
HEAD指向的版本就是當(dāng)前版本专酗,因此,Git允許我們在版本的歷史之間穿梭盗扇,使用命令git reset --hard commit_id祷肯。
穿梭前沉填,用git log可以查看提交歷史,以便確定要回退到哪個版本佑笋。
要重返未來翼闹,用git reflog查看命令歷史,以便確定要回到未來的哪個版本蒋纬。
工作區(qū)與暫存區(qū)
撤銷修改
錯誤使用git add后猎荠,直接 git reset,撤銷所有添加文件
- 文件修改后蜀备,未使用git add命令法牲,不在暫存區(qū)
git checkout -- readme.txt
可以將修改內(nèi)容撤銷,與版本庫最新版本代碼一致
- 文件修改后琼掠,執(zhí)行了git add命令拒垃,已存在于暫存區(qū)
兩步執(zhí)行
git reset HEAD readme.txt #既可以回退版本,也可以把暫存區(qū)的修改回退到工作區(qū)瓷蛙。當(dāng)我們用HEAD時悼瓮,表示最新的版本
git checkout -- readme.txt #把readme.txt文件在工作區(qū)的修改全部撤銷
遠(yuǎn)程倉庫,秘鑰生成配置
git本地倉庫艰猬,可以是多臺機器横堡,把每臺機器生成的公鑰添加到github SHH keys中,這樣本機就可以通過私鑰訪問github倉庫
本機生成公鑰和私鑰的命令:
打開git bash冠桃,在用戶主目錄下執(zhí)行 $ ssh-keygen -t rsa -C "youremail@example.com"命贴,一路回車鍵使用默認(rèn)值,即可生成.shh目錄食听,該目錄下有兩個文件id_rsa和id_rsa.pub胸蛛,分別為私鑰和公鑰,將公鑰添加到github SSH keys中即可
添加遠(yuǎn)程倉庫
1 先在github上建立一個空庫
2 使用命令git remote add origin git@github.com:chnqi/gitlearn.git樱报;
總結(jié):
要關(guān)聯(lián)一個遠(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)的時候是拒絕干活的!當(dāng)有網(wǎng)絡(luò)的時候汗贫,再把本地提交推送一下就完成了同步身坐,真是太方便了!
方法二:第一種有時一直報錯 落包,用此種方式
1 在github上建立空庫
2 git clone git@github.com:chnqi/gitCloneTest.git
3 進(jìn)入下載的目錄部蛇,執(zhí)行g(shù)it init
4 因為遠(yuǎn)程clone下來的,已經(jīng)有了關(guān)聯(lián)關(guān)系咐蝇,可以不執(zhí)行g(shù)it remot add origin git@github.com:chnqi/gitCloneTest.git
5 git push -u origin master
從遠(yuǎn)程倉庫克隆
git clone git@github.com:chnqi/gitCloneTest.git
git分支
速度遠(yuǎn)快于SVN涯鲁,使用的是指針指向分支的方式
分支在實際中有什么用呢?假設(shè)你準(zhǔn)備開發(fā)一個新功能有序,但是需要兩周才能完成抹腿,第一周你寫了50%的代碼,如果立刻提交旭寿,由于代碼還沒寫完警绩,不完整的代碼庫會導(dǎo)致別人不能干活了。如果等代碼全部寫完再一次提交盅称,又存在丟失每天進(jìn)度的巨大風(fēng)險
Git鼓勵大量使用分支:
查看分支:git branch
創(chuàng)建分支:git branch <name>
切換分支:git checkout <name>或者git switch <name>
創(chuàng)建+切換分支:git checkout -b <name>或者git switch -c <name>
合并某分支到當(dāng)前分支:git merge <name>
刪除分支:git branch -d <name>