創(chuàng)建一個(gè)空目錄
?$ mkdir git??
?$ cd git
??$ pwd
把這個(gè)目錄初始化為Git可以管理的倉庫
?$ git init
在目錄下創(chuàng)建一個(gè)readme.rtf文件,把文件添加提交到倉庫
?$ git add readme.rtf
?$ git commit -m “wrote a read file”
展示倉庫當(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),可以不寫全)
找到輸入過的命令
?$ git reflog
查看工作區(qū)和版本庫里最新版本的區(qū)別
?$ git diff HEAD - - readme.rtf
丟棄工作區(qū)的修改
?$ git checkout - - readme.rtf
撤銷暫存區(qū)的修改,放回工作區(qū)
?$ git reset HEAD readme.rtf
刪除某個(gè)文件
?$ rm test.rtf
從版本庫恢復(fù)刪掉的文件
?$ git checkout - - test.rtf
從版本庫刪除某個(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是公鑰,可以放心地告訴任何人
把本地倉庫的內(nèi)容推送到GitHub的倉庫
?$git remote add origin git@github.com:xxxxxxxxx/learngit.git
?$ git push -u origin master (第一次加-u參數(shù))
把本地倉庫提交到服務(wù)器
?$ git push origin master
把服務(wù)器的倉庫克隆到本地
?$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è)沒有被合并的分支
?$git branch -D
查看遠(yuǎn)程倉庫的信息
?$ git remote
查看遠(yuǎn)程倉庫更詳細(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
忽略倉庫里某些文件,讓其不參與提交,可編寫.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用戶
????$ sudoadduser git
???3.創(chuàng)建證書登錄
???手機(jī)用戶的id_rsa.pub文件,把所有公鑰導(dǎo)入到/home/git/.ssh/authorized_keys文件里,一行一個(gè)
???4.初始化Git倉庫
??先選定一個(gè)目錄作為Git倉庫,假定是/srv/sample.git,在/srv目錄下輸入命令:
??$ sudogit init --bare sample.git
??Git就會(huì)創(chuàng)建一個(gè)裸倉庫,裸倉庫沒有工作區(qū),因?yàn)榉?wù)器上的Git倉庫純粹是為了共享,所以不讓用戶直接登錄到服務(wù)器上去改工作區(qū),并且服務(wù)器上的Git倉庫通常都以.git結(jié)尾。然后,把owner改為git:
??$ sudochown -R git:git sample.git
?5.禁用shell登錄
?出于安全考慮,第二步創(chuàng)建的git用戶不允許登錄shell,這可以通過編輯/etc/passwd文件完成。找到類似下面的一行:
?git:x:1001:1001:,,,:/home/git:/bin/bash
?改為:
?git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
?這樣,git用戶可以正常通過ssh使用git,但無法登錄shell,因?yàn)槲覀優(yōu)間it用戶指定的git-shell每次一登錄就自動(dòng)退出
?6.克隆遠(yuǎn)程倉庫
??$git clone git@server:/srv/sample.git