內容導讀
一直以來,Git的使用只停留在簡單的操作上。但是這種方式Git會盡可能的使用 Fast forward 模式,這種情況下,刪除分支后,分支信息會一并刪除。tag標簽即為給 commit 操作產生的id值取的別名。添加后,遠程倉庫的名字就叫做origin, Git的默認叫法,也可以更改。/home/git/.ssh/authorized_keys 一行一個用戶,如果沒有該文件,手動創建即可。當前用戶的配置文件在home目錄的 .gitconfig ,可以直接修改文件。
一直以來,Git的使用只停留在簡單的操作上。要得心應手的使用Git,必須了解點其他的東西。
配置個人信息
$ git config --global user.name "xxyangyoulin"$ git config --global user.email "xxyangyoulin@gmail.com"
查看提交日志
git log
git log --pretty=oneline #簡略查看信息
git log --graph --pretty=oneline --abbrev-commit #查看分支信息
文件差別對比
git diff file
git diff filepath工作區與暫存區比較
git diff HEAD filepath工作區與HEAD ( 當前工作分支) 比較
git diff --staged 或 --cached filepath暫存區與HEAD比較
git diff branchName filepath當前分支的文件與branchName 分支的文件進行比較
git diff commitId filepath與某一次提交進行比較
進行版本穿梭
在Git中,用HEAD表示當前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^,往上寫成HEAD~100。
回上一版
git reset --hard HEAD^
此時git log 發現當前版本以后的版本消失。
想回到未來版本?未關閉窗口之前,找到版本號:
git reset --hard <版本號>
版本的跳轉,HEAD如同一個指針,跳轉不過是指針指向不同的版本。
HEAD指向哪個版本,當前版本定位就在哪兒。
但是找不到版本號了?
git提供了查看你的每一次命令的命令:
git reflog
撤銷修改
git checkout -- changedFile
將會回到文件最后一次commit或者add時候的狀態。
已經被你add了?
撤銷add
git reset HEAD file
這樣add的文件就被撤銷回到工作區了。
刪除文件
-
工作區刪除了文件并且確定也要刪除版本庫的該文件:
git rm hello.txtgit commit -m 'rm hello'
-
刪錯了?
git checkout -- hello.txt
恢復到最新版本。
進行分支管理
創建新的分支
git branch newbranch
切換到新分支
git checkout newbranch
創建并且切換
git checkout -b newbranch
查看當前分支
git branch
合并指定分支
git merge otherbranch
合并發生沖突,手動修改沖突文件并提交即可。
但是這種方式Git會盡可能的使用Fast forward模式,這種情況下,刪除分支后,分支信息會一并刪除。
禁用Fast forward模式?
git merge --no-ff otherbranch
--no-ff可以保留之前的分支歷史,能夠更好的查看歷史分支信息。而git merge只保留單條分支記錄。

gitmergenoff.png
刪除指定分支
git branch -d otherbranch
推薦的是:創建一個分支完成一個任務,完成任務合并分支后刪除完成任務的分支。
但是提示沒有合并分支?
git branch -D otherbranch
強制刪除。
儲藏工作現場
工作途中,我們在A分支工作,當前任務未完成,沒有添加到暫存區,但是需要緊急修復bug,使用:
git stash
儲存現場,然后切換到需要修復bug的分支B。
接著,創建修復bug的分支C,完成修復任務,回到B分支,合并C分支,刪除C分支。
然后,回到我們正在工作的A分支:
git checkout A
查看我們的工作現場:
git stash list
恢復工作現場?
git stash pop
此時會恢復并且刪除stash的內容。
不刪除stash內容?
git stash apply <指定stash,可以多次stash>
只執行恢復操作。
但是以后想刪除?
git stash drop
執行刪除stash內容的操作。
查看遠程分支
git remote
git remote -v
將會顯示更為詳細的信息。
分支多人協作
其他人從服務器clone你的項目的時候,他默認只能在本地看到master分支,但是想切換其他分支進行工作?
git checkout -b work1 orgin/work1
在本地創建和遠程對應的分支。
完成工作之后推送到服務器:
git push origin work1
此時其他人想要推送到work1就必須:
git pull
先拉取一下。
如果提示There is no tracking information for the current branch.
此時需要指定本地work1和遠程work1分支的連接關系:
git branch --set-upstream work1 origin/work1
然后再執行拉取操作。
拉取之后,可能會發生沖突,手動解決即可。
tag標簽的使用
tag標簽即為給commit操作產生的id值取的別名。
git tag <-s> v1.0 <-m "tag explain"> <commit id>
commit id 為空將會對應最新的commit。
-s秘鑰簽名標簽。
-m標簽說明。
查看標簽信息:
git taggit show v1.0
刪除標簽:
git tag -d v1.0
推送標簽:
git push origin v1.0
推送全部:
git push origin --tags
刪除推送了的標簽:
git tag -d v1.0git push origin :refs/tags/v1.0
忽略文件
強制添加存在.gitignore的文件
git add -f file.class
使用遠程倉庫
關聯遠程倉庫
git remote add origin git@github.com:mnnyang/reponame.git
添加后,遠程倉庫的名字就叫做origin, Git的默認叫法,也可以更改。
關聯之后,把本地的master分支所有內容推動到遠程庫上:
git push -u origin master
-u參數:Git會把本地的master分支和遠程的master分支關聯起來,以后的推送和拉取就可以簡化命令。
搭建Git遠程服務器
-
首先肯定是要安裝了Git才行啊。
-
創建一個專門用于運行git服務的用戶:
sudo adduser git -
把需要登錄的用戶的
id_rea.pub添加到/home/git/.ssh/authorized_keys一行一個用戶,如果沒有該文件,手動創建即可。 -
選擇一個目錄作為倉庫,在該目錄下:
sudo git init --bare sample.git -
把倉庫擁有者改為git用戶:
sudo chown -R git:git sample.git -
禁止shell登錄,修改
/etc/passwdgit:......:/home/git:/usr/bin/git-shell -
本地克隆使用了:
git clone git@serverip:/srv/sample.git
GitHub
生成key
ssh-keygen -t rsa
測試連接
ssh -T git@github.com
刪除已關聯的遠程庫
git remote rm origin
可以關聯多個遠程庫
修改默認的遠程庫名稱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是針對當前用戶起作用。不加則只針對當前工作目錄。
配置文件在.git/config文件中。當前用戶的配置文件在home目錄的.gitconfig,可以直接修改文件。
-
去官方網站學習更多:
git-scm















