創(chuàng)建一個(gè)空目錄
?$ mkdir git??
?$ cd git
??$ pwd
把這個(gè)目錄初始化為Git可以管理的倉(cāng)庫(kù)
?$ git init
在目錄下創(chuàng)建一個(gè)readme.rtf文件悬赏,把文件添加提交到倉(cāng)庫(kù)
?$ git add readme.rtf
?$ git commit -m “wrote a read file”
展示倉(cāng)庫(kù)當(dāng)前的狀態(tài)
?$ git status
文件被修改后,查看修改了什么內(nèi)容
?$ git diff
查看提交的歷史記錄
?$ git log
縮略展示提交的歷史記錄
?$ git log- -pretty=oneline
回退到上一個(gè)版本
?$ git reset - -hard HEAD^
回退到上上個(gè)版本
?$ git reset - -hard HEAD^^
回退到前100個(gè)版本
?$ git reset- -hard HEAD~100
回退到某個(gè)版本
?$ git reset- -hard 123456(版本號(hào),可以不寫(xiě)全)
找到輸入過(guò)的命令
?$ git reflog
查看工作區(qū)和版本庫(kù)里最新版本的區(qū)別
?$ git diff HEAD - - readme.rtf
丟棄工作區(qū)的修改
?$ git checkout - - readme.rtf
撤銷(xiāo)暫存區(qū)的修改烙常,放回工作區(qū)
?$ git reset HEAD readme.rtf
刪除某個(gè)文件
?$ rm test.rtf
從版本庫(kù)恢復(fù)刪掉的文件
?$ git checkout - - test.rtf
從版本庫(kù)刪除某個(gè)文件
?$ git rm test.rtf
??$ git commit -m “remove test.rtf”
創(chuàng)建SSH Key
?$ssh-keygen -t rsa -C“xxxxxxxx@163.com”
?id_rsa是私鑰锈玉,不能泄露出去掀泳,id_rsa.pub是公鑰懒熙,可以放心地告訴任何人
把本地倉(cāng)庫(kù)的內(nèi)容推送到GitHub的倉(cāng)庫(kù)
?$git remote add origin git@github.com:xxxxxxxxx/learngit.git
?$ git push -u origin master (第一次加-u參數(shù))
把本地倉(cāng)庫(kù)提交到服務(wù)器
?$ git push origin master
把服務(wù)器的倉(cāng)庫(kù)克隆到本地
?$git clone git@github.com:xxxxxxxxx/gitskills.git
?$ git clonehttps://github.com/xxxxxxxxx/gitskills.git
創(chuàng)建一個(gè)dev分支罪针,并切換到dev分支
?$ git checkout -b dev
-b表示創(chuàng)建并切換蕾殴,等價(jià)于
?$ git branch dev
?$ git checkout dev
查看當(dāng)前分支
?$ git branch
把dev分支合并到當(dāng)前分支
?$ git merge dev
刪除dev分支
?$ git branch -d dev
查看分支合并情況
?$git log - -graph - -pretty=oneline - -abbrev-commit
以普通模式合并笑撞,保留分支的信息
?$git merge --no-ff -m"merge with no-ff"dev
保存當(dāng)前工作現(xiàn)場(chǎng),以后可以恢復(fù)繼續(xù)工作
?$ git stash
顯示存儲(chǔ)的工作現(xiàn)場(chǎng)
?$ git stash list
恢復(fù)工作現(xiàn)場(chǎng)钓觉,并且不刪除存儲(chǔ)的工作現(xiàn)場(chǎng)
?$ git stash apply
刪除存儲(chǔ)的工作現(xiàn)場(chǎng)
?$ git stash drop
恢復(fù)工作現(xiàn)場(chǎng)茴肥,并刪掉存儲(chǔ)的工作現(xiàn)場(chǎng)
?$ git stash pop
強(qiáng)行刪除一個(gè)沒(méi)有被合并的分支
?$git branch -D
查看遠(yuǎn)程倉(cāng)庫(kù)的信息
?$ git remote
查看遠(yuǎn)程倉(cāng)庫(kù)更詳細(xì)的信息
?$? git remote -v
推送到服務(wù)器的dev分支
?$ git push origin dev
獲取服務(wù)器最新更改
?$ git pull
在本地創(chuàng)建和遠(yuǎn)程分支對(duì)應(yīng)的分支
?$git checkout -b branch-name origin/branch-name
創(chuàng)建本地分支和遠(yuǎn)程分支的鏈接關(guān)系
?$ git branch --set-upstream branch-name origin/branch-name
在Git中打一個(gè)標(biāo)簽,首先切換到需要打標(biāo)簽的分支上
?$ git tag v1.0
在對(duì)應(yīng)的歷史提交上打標(biāo)簽
?$ git tag v0.9 123456(提交的id)
查看標(biāo)簽信息
?$ git show v0.9
指定標(biāo)簽信息
?$ git tag -a -m “abcd…”
用PGP簽名標(biāo)簽
?$ git tag -s -m “abcd…”
刪除標(biāo)簽
?$ git tag -d v0.1
推送標(biāo)簽到服務(wù)器
?$ git push origin v1.0
推送所有未推送的標(biāo)簽到服務(wù)器
?$ git push origin - - tags
刪除遠(yuǎn)程的標(biāo)簽荡灾,先刪除本地瓤狐,然后從遠(yuǎn)程刪除
?$ git push origin :refs/tags/v0.9
忽略倉(cāng)庫(kù)里某些文件,讓其不參與提交卧晓,可編寫(xiě).gitignore文件芬首,然后輸入要忽略的文件名
配置別名,比如st表示status逼裆,co表示checkout郁稍,ci表示commit,br表示branch
?$ git config - -globalalias.ststatus
?$ git config - -globalalias.cocheckout
?$ git config - -globalalias.cicommit
?$ git config - -globalalias.brbranch
搭建Git服務(wù)器
首先準(zhǔn)備一臺(tái)運(yùn)行Linux的機(jī)器
??1.安裝git
?$ sudoapt-getinstall git
?2.創(chuàng)建一個(gè)git用戶(hù)
????$ sudoadduser git
???3.創(chuàng)建證書(shū)登錄
???手機(jī)用戶(hù)的id_rsa.pub文件胜宇,把所有公鑰導(dǎo)入到/home/git/.ssh/authorized_keys文件里耀怜,一行一個(gè)
???4.初始化Git倉(cāng)庫(kù)
??先選定一個(gè)目錄作為Git倉(cāng)庫(kù),假定是/srv/sample.git桐愉,在/srv目錄下輸入命令:
??$ sudogit init --bare sample.git
??Git就會(huì)創(chuàng)建一個(gè)裸倉(cāng)庫(kù)财破,裸倉(cāng)庫(kù)沒(méi)有工作區(qū),因?yàn)榉?wù)器上的Git倉(cāng)庫(kù)純粹是為了共享从诲,所以不讓用戶(hù)直接登錄到服務(wù)器上去改工作區(qū)左痢,并且服務(wù)器上的Git倉(cāng)庫(kù)通常都以.git結(jié)尾。然后系洛,把owner改為git:
??$ sudochown -R git:git sample.git
?5.禁用shell登錄
?出于安全考慮俊性,第二步創(chuàng)建的git用戶(hù)不允許登錄shell,這可以通過(guò)編輯/etc/passwd文件完成描扯。找到類(lèi)似下面的一行:
?git:x:1001:1001:,,,:/home/git:/bin/bash
?改為:
?git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
?這樣定页,git用戶(hù)可以正常通過(guò)ssh使用git,但無(wú)法登錄shell绽诚,因?yàn)槲覀優(yōu)間it用戶(hù)指定的git-shell每次一登錄就自動(dòng)退出
?6.克隆遠(yuǎn)程倉(cāng)庫(kù)
??$git clone git@server:/srv/sample.git