內(nèi)容導(dǎo)讀
一直以來(lái),Git的使用只停留在簡(jiǎn)單的操作上。但是這種方式Git會(huì)盡可能的使用 Fast forward 模式,這種情況下,刪除分支后,分支信息會(huì)一并刪除。tag標(biāo)簽即為給 commit 操作產(chǎn)生的id值取的別名。添加后,遠(yuǎn)程倉(cāng)庫(kù)的名字就叫做origin, Git的默認(rèn)叫法,也可以更改。/home/git/.ssh/authorized_keys 一行一個(gè)用戶,如果沒(méi)有該文件,手動(dòng)創(chuàng)建即可。當(dāng)前用戶的配置文件在home目錄的 .gitconfig ,可以直接修改文件。
一直以來(lái),Git的使用只停留在簡(jiǎn)單的操作上。要得心應(yīng)手的使用Git,必須了解點(diǎn)其他的東西。
配置個(gè)人信息
$ git config --global user.name "xxyangyoulin"$ git config --global user.email "xxyangyoulin@gmail.com"
查看提交日志
git log
git log --pretty=oneline #簡(jiǎn)略查看信息
git log --graph --pretty=oneline --abbrev-commit #查看分支信息
文件差別對(duì)比
git diff file
git diff filepath
工作區(qū)與暫存區(qū)比較
git diff HEAD filepath
工作區(qū)與HEAD ( 當(dāng)前工作分支) 比較
git diff --staged 或 --cached filepath
暫存區(qū)與HEAD比較
git diff branchName filepath
當(dāng)前分支的文件與branchName 分支的文件進(jìn)行比較
git diff commitId filepath
與某一次提交進(jìn)行比較
進(jìn)行版本穿梭
在Git中,用HEAD
表示當(dāng)前版本,上一個(gè)版本就是HEAD^
,上上一個(gè)版本就是HEAD^^
,往上寫(xiě)成HEAD~100
。
回上一版
git reset --hard HEAD^
此時(shí)git log
發(fā)現(xiàn)當(dāng)前版本以后的版本消失。
想回到未來(lái)版本?未關(guān)閉窗口之前,找到版本號(hào):
git reset --hard <版本號(hào)>
版本的跳轉(zhuǎn),HEAD如同一個(gè)指針,跳轉(zhuǎn)不過(guò)是指針指向不同的版本。
HEAD指向哪個(gè)版本,當(dāng)前版本定位就在哪兒。
但是找不到版本號(hào)了?
git提供了查看你的每一次命令的命令:
git reflog
撤銷修改
git checkout -- changedFile
將會(huì)回到文件最后一次commit
或者add
時(shí)候的狀態(tài)。
已經(jīng)被你add
了?
撤銷add
git reset HEAD file
這樣add的文件就被撤銷回到工作區(qū)了。
刪除文件
-
工作區(qū)刪除了文件并且確定也要?jiǎng)h除版本庫(kù)的該文件:
git rm hello.txtgit commit -m 'rm hello'
-
刪錯(cuò)了?
git checkout -- hello.txt
恢復(fù)到最新版本。
進(jìn)行分支管理
創(chuàng)建新的分支
git branch newbranch
切換到新分支
git checkout newbranch
創(chuàng)建并且切換
git checkout -b newbranch
查看當(dāng)前分支
git branch
合并指定分支
git merge otherbranch
合并發(fā)生沖突,手動(dòng)修改沖突文件并提交即可。
但是這種方式Git會(huì)盡可能的使用Fast forward
模式,這種情況下,刪除分支后,分支信息會(huì)一并刪除。
禁用Fast forward
模式?
git merge --no-ff otherbranch
--no-ff
可以保留之前的分支歷史,能夠更好的查看歷史分支信息。而git merge
只保留單條分支記錄。
gitmergenoff.png
刪除指定分支
git branch -d otherbranch
推薦的是:創(chuàng)建一個(gè)分支完成一個(gè)任務(wù),完成任務(wù)合并分支后刪除完成任務(wù)的分支。
但是提示沒(méi)有合并分支?
git branch -D otherbranch
強(qiáng)制刪除。
儲(chǔ)藏工作現(xiàn)場(chǎng)
工作途中,我們?cè)贏分支工作,當(dāng)前任務(wù)未完成,沒(méi)有添加到暫存區(qū),但是需要緊急修復(fù)bug,使用:
git stash
儲(chǔ)存現(xiàn)場(chǎng),然后切換到需要修復(fù)bug的分支B。
接著,創(chuàng)建修復(fù)bug的分支C,完成修復(fù)任務(wù),回到B分支,合并C分支,刪除C分支。
然后,回到我們正在工作的A分支:
git checkout A
查看我們的工作現(xiàn)場(chǎng):
git stash list
恢復(fù)工作現(xiàn)場(chǎng)?
git stash pop
此時(shí)會(huì)恢復(fù)并且刪除stash的內(nèi)容。
不刪除stash內(nèi)容?
git stash apply <指定stash,可以多次stash>
只執(zhí)行恢復(fù)操作。
但是以后想刪除?
git stash drop
執(zhí)行刪除stash內(nèi)容的操作。
查看遠(yuǎn)程分支
git remote
git remote -v
將會(huì)顯示更為詳細(xì)的信息。
分支多人協(xié)作
其他人從服務(wù)器clone你的項(xiàng)目的時(shí)候,他默認(rèn)只能在本地看到master分支,但是想切換其他分支進(jìn)行工作?
git checkout -b work1 orgin/work1
在本地創(chuàng)建和遠(yuǎn)程對(duì)應(yīng)的分支。
完成工作之后推送到服務(wù)器:
git push origin work1
此時(shí)其他人想要推送到work1就必須:
git pull
先拉取一下。
如果提示There is no tracking information for the current branch.
此時(shí)需要指定本地work1和遠(yuǎn)程work1分支的連接關(guān)系:
git branch --set-upstream work1 origin/work1
然后再執(zhí)行拉取操作。
拉取之后,可能會(huì)發(fā)生沖突,手動(dòng)解決即可。
tag標(biāo)簽的使用
tag標(biāo)簽即為給commit
操作產(chǎn)生的id值取的別名。
git tag <-s> v1.0 <-m "tag explain"> <commit id>
commit id
為空將會(huì)對(duì)應(yīng)最新的commit
。
-s
秘鑰簽名標(biāo)簽。
-m
標(biāo)簽說(shuō)明。
查看標(biāo)簽信息:
git taggit show v1.0
刪除標(biāo)簽:
git tag -d v1.0
推送標(biāo)簽:
git push origin v1.0
推送全部:
git push origin --tags
刪除推送了的標(biāo)簽:
git tag -d v1.0git push origin :refs/tags/v1.0
忽略文件
強(qiáng)制添加存在.gitignore
的文件
git add -f file.class
使用遠(yuǎn)程倉(cāng)庫(kù)
關(guān)聯(lián)遠(yuǎn)程倉(cāng)庫(kù)
git remote add origin git@github.com:mnnyang/reponame.git
添加后,遠(yuǎn)程倉(cāng)庫(kù)的名字就叫做origin, Git的默認(rèn)叫法,也可以更改。
關(guān)聯(lián)之后,把本地的master分支所有內(nèi)容推動(dòng)到遠(yuǎn)程庫(kù)上:
git push -u origin master
-u
參數(shù):Git會(huì)把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來(lái),以后的推送和拉取就可以簡(jiǎn)化命令。
搭建Git遠(yuǎn)程服務(wù)器
-
首先肯定是要安裝了Git才行啊。
-
創(chuàng)建一個(gè)專門(mén)用于運(yùn)行g(shù)it服務(wù)的用戶:
sudo adduser git
-
把需要登錄的用戶的
id_rea.pub
添加到/home/git/.ssh/authorized_keys
一行一個(gè)用戶,如果沒(méi)有該文件,手動(dòng)創(chuàng)建即可。 -
選擇一個(gè)目錄作為倉(cāng)庫(kù),在該目錄下:
sudo git init --bare sample.git
-
把倉(cāng)庫(kù)擁有者改為git用戶:
sudo chown -R git:git sample.git
-
禁止shell登錄,修改
/etc/passwd
git:......:/home/git:/usr/bin/git-shell
-
本地克隆使用了:
git clone git@serverip:/srv/sample.git
GitHub
生成key
ssh-keygen -t rsa
測(cè)試連接
ssh -T git@github.com
刪除已關(guān)聯(lián)的遠(yuǎn)程庫(kù)
git remote rm origin
可以關(guān)聯(lián)多個(gè)遠(yuǎn)程庫(kù)
修改默認(rèn)的遠(yuǎn)程庫(kù)名稱origin
即可。
自定義配置
命令別名
git config --global alias.st statusgit config --global alias.cm commitgit config --global alias.br branchgit config --global alias.ma 'push origin master'git config --global alias.unstage 'reset HEAD'git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
--global
是針對(duì)當(dāng)前用戶起作用。不加則只針對(duì)當(dāng)前工作目錄。
配置文件在.git/config
文件中。當(dāng)前用戶的配置文件在home目錄的.gitconfig
,可以直接修改文件。
-
去官方網(wǎng)站學(xué)習(xí)更多:
git-scm