Git平常使用

建立版本庫: 

# cd 項目目錄下
 
git init

#將整個項目文件加入暫存區
[liming@local project_name]$ git add .
[liming@local project_name]$ git status
# 位於分支 master
#
# 初始提交
#
# 要提交的變動:
#   (使用 "git rm --cached <file>..." 撤出暫存區)
liming@local project_name]$ git commit -m 'init add new files'
[master(根提交) 450b4b4] init add new files
......

# 下面命令會增長URL地址爲'git@github.com:liming/project_name.git',名稱爲origin的遠程服務器庫.
# 之後提交代碼的時候只須要使用 origin別名便可
liming@local project_name]$ git remote add origin git@github.com:liming/project_name.git

# 顯示遠程倉庫在本地名字
[liming@local project_name]$ git remote show
origin

# git push [remote-name] [branch-name] 
git push -u origin master

.gitignore:

#符合以下規則的,未被track的文件,git將忽略
.DS_Store
.gitignore
*.swp
application/.DS_Store

有時候在項目開發過程當中,忽然心血來潮想把某些目錄或文件加入忽略規則,按照上述方法定義後發現並未生效,緣由是 .gitignore只能忽略那些原來沒有被track的文件,若是某些文件已經被歸入了版本管理中,則修改.gitignore是無效的。那麼解決方法就是,先把本地緩存刪除(改變成未track狀態),而後再提交。php

[liming@local project_name]$ git rm -r --cached .
[liming@local project_name]$ git add .
[liming@local project_name]$ git commit -m 'update .gitignore'

 

git 標籤

git標籤分爲兩種類型:輕量標籤和附註標籤。
# 輕量標籤是指向提交對象的引用,附註標籤則是倉庫中的一個獨立對象(建議使用附註標籤)。
# 建立輕量標籤
$ git tag v0.1.2-light
git

# 建立附註標籤
$ git tag -a v0.1.2 -m 「0.1.2版本」
github

區別:
建立輕量標籤不須要傳遞參數,直接指定標籤名稱便可。
建立附註標籤時,參數a即annotated的縮寫,指定標籤類型,後附標籤名。參數m指定標籤說明,說明信息會保存在標籤對象中。
vim

切換到標籤
#與切換分支命令相同
$ git checkout [tagname]
centos

查看標籤列表
# 查看本地 tag 列表
$ git tag -l  


查看具體標籤信息
$ git show v0.1.2緩存

刪除標籤
誤打或須要修改標籤時,須要先將標籤刪除,再打新標籤。
$ git tag -d v0.1.2  #參數d即delete的縮寫,意爲刪除其後指定的標籤。
bash

給指定的commit打標籤
# 打標籤沒必要要在head之上,也可在以前的版本上打,這須要你知道某個提交對象的校驗和(經過git log 獲取)。
# 補打標籤
$ git tag -a v0.1.1
9fbc3d0服務器

分享標籤
# 默認狀況下,git push 並不會把標籤傳送到遠端服務器上,只有經過顯式命令才能分享標籤到遠端倉庫。其命令格式如同推送分支,運行 git push origin [tagname] 便可。
$ git push origin v0.1.2                   #將v0.1.2標籤提交到git服務器
$ git push origin –tags                  #一次推送全部本地新增的標籤上去
$ git push origin --delete v0.1.2     #刪除遠程標籤
app

注意:若是想看以前某個標籤狀態下的文件,能夠這樣操做spa

$ git tag                       #查看當前分支下的標籤
$ git  checkout v0.21     #此時會指向打v0.21標籤時的代碼狀態,(但如今處於一個空的分支上)
$ cat  test.txt               #查看某個文件

批量操做
# 批量刪除遠端標籤
$ git show-ref --tag | awk '/(.*)(\s+)(.*)$/ {print ":" $2}' | xargs git push origin
# 批量刪除本地標籤(標籤名爲 1.0.0.* 的全部標籤)
$ git tag | grep "1.0.0." | xargs git tag -d

流程:git checkout branch  => git tag -a 版本號 -m 註釋  => git push origin 版本號

git diff 

# 比較兩個分支的差別,將會以文件列表的形式展現(遠程分支須要加 origin )
git diff branch1 origin/branch2 --stat

# 比較兩個分支中文件的不一樣
git diff branch1 origin/branch2  /path/具體文件

git stash 

# 顯示最近一次 stash 中的文件列表
git stash show 

# 顯示暫存區有多少條暫存記錄,stash@{0},stash@{1}... 一條暫存記錄會有多個文件
git stash list

# 暫存信息標識
git stash save 'message' 
 
# 使用 stash@{1} 這個暫存
git stash apply  stash@{1}

# 去掉 stash@{1} 這個 暫存
git stash drop stash@{1}

# 回退到某個版本
1)git log  # 獲取要回退的版本標識 
2) git reset --hard  1)步驟歷史版本的id

git config  

1. git config -l     # 顯示當前的 git config 的全部配置內容,內容所在文件:~/.gitconfig 和 .git/config  

2. git 結合 vim 實現 commit 前的 diff 展現。

執行以下命令:

#git 實現vimdiff 
$ git config --global diff.tool vimdiff 
$ git config --global difftool.prompt false 
# 以下爲 config git 操做命令 別名 配置
$ git config --global alias.d difftool

或者編輯你的 ~/.gitconfig 文件,添加如下各行:

[diff]
        tool = vimdiff
[difftool]
        prompt = false
[alias]
        d = difftool


如上配置完成後,就能夠在 git commit 前,使用 git d 打開vim界面對比代碼,而後用 :wq or :qa 繼續比較下一個文件。

文檔參考:

 https://git-scm.com/docs (英文)
 https://git-scm.com/book/zh/v2 (中文)

 廖雪峯的 git 教程

其餘:

** mac開發,無文件大小寫區分致使 centos 大小寫同時存在,處理方法:

####### 出現 兩個大小寫文件 ####
 還沒有暫存以備提交的變動:
#   (使用 "git add <file>..." 更新要提交的內容)
#   (使用 "git checkout -- <file>..." 丟棄工做區的改動)
#
#	修改:      application/controllers/Foo.php
#	修改:      application/controllers/foo.php
#

修改還沒有加入提交(使用 "git add" 和/或 "git commit -a")
[liming@local project]$ git commit -m 'w' application/controllers/
[master 6f85312] w
 2 file changed, 2 insertion(+)
[liming@local project]$ git rm application/controllers/foo.php
rm 'application/controllers/foo.php'
[liming@local project]$ git status
# 位於分支 master
# 您的分支領先 'origin/master' 共 1 個提交。
#   (使用 "git push" 來發布您的本地提交)
#
# 要提交的變動:
#   (使用 "git reset HEAD <file>..." 撤出暫存區)
#
#	刪除:      application/controllers/foo.php
#
# 還沒有暫存以備提交的變動:
#   (使用 "git add/rm <file>..." 更新要提交的內容)
#   (使用 "git checkout -- <file>..." 丟棄工做區的改動)
#
#	刪除:      application/controllers/Foo.php
#
[liming@local project]$ git commit -m 'del foo.php' application/controllers/foo.php
[master afabba6] del foo.php
 1 file changed, 57 deletions(-)
 delete mode 100644 application/controllers/foo.php
[liming@local project]$ git status
# 位於分支 master
# 您的分支領先 'origin/master' 共 1 個提交。
#   (使用 "git push" 來發布您的本地提交)
#
# 還沒有暫存以備提交的變動:
#   (使用 "git add/rm <file>..." 更新要提交的內容)
#   (使用 "git checkout -- <file>..." 丟棄工做區的改動)
#
#	刪除:      application/controllers/Foo.php
#


[liming@local project]$ git push
#
# 後續 git checkout application/controllers/Foo.php 這樣就刪除了git 庫中的 foo.php

2.單服實踐:

分支:

beta:標識文件env,設置 env = beta, 只合並 dev 
① env=beta , git stash save "env=beta"
② env=online

dev: 標識文件env,設置 env = dev,合併到 beta 前 ,
① 只有 env=dev 的單文件, git stash save "env=dev";
② 存在 修改標識文件env的,設置 env = beta ,不存在 修改標識文件 env 的,直接 git commit -m 'mod' . 
③ git checkout beta 
④ git merge -m 'merge' dev

release:git merge -m 

相關文章
相關標籤/搜索