安裝git:
yum install git
版本git:
git --version
卸載git:
yum remove git
git config --global user.name "username"
git config --global user.email [email protected]
======================================================================================================
裸庫部署:
部署例子:服務器域名: www.testdev.com.cn
服務器:
cd /home
git init --bare web.git
chown -R git:nginx web.git
chmod -R 775 web.git
客戶端:
git clone git@IP:/home/web.git msy
輸入git密碼 git_password
git clone git@ip:/home/web.git web_weiya
現在地址下載應該是:
git clone ssh://git@IP:65123/home/web.git
輸入git密碼 git_password
======================================================================================================
git remote set-url origin ssh://git@IP:65123/home/web.git
======================================================================================================
git remote remove msy_origin
git remote add msy_origin https://github.com/testname/msy.git
git push -u msy_origin master:master
git remote remove weiya_origin
git remote add weiya_origin https://github.com/testname/weiya.git
git push -u weiya_origin master:master
git clone https://github.com/testname/msy.git]
git clone https://github.com/testname/weiya.git
git branch --set-upstream-to=origin/<branch> master
示例: git branch --set-upstream-to=origin/master
======================================================================================================
獲取遠程分支:
# git checkout -b xxx
刪除遠程分支:
1 git push 遠程庫 --delete 遠程分支
2 git fetch -p
======================================================================================================
忽略已跟蹤的文件
git update-index --assume-unchanged msy/Application/Admin/Conf/menu_conf.php
撤銷-忽略已跟蹤的文件:
git update-index --no-assume-unchanged msy/Application/Admin/Conf/menu_conf.php
刪除已追蹤的文件夾或文件夾:
1 git rm -r --cached .idea/ #保留本地
2 git rm -r .idea/ #不保留本地
3 git commit -m 'x'
4 git push ...
規則很簡單,不做過多解釋,但是有時候在項目開發過程中,突然心血來潮想把某些目錄或文件加入忽略規則,按照上述方法定義後發現並未生效,
原因是.gitignore只能忽略那些原來沒有被track的文件,如果某些文件已經被納入了版本管理中,則修改.gitignore是無效的。那麼解決方法就是先把本地緩存刪除(改變成未track狀態),然後再提交:
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
http://blog.csdn.net/fuchaosz/article/details/52170105
======================================================================================================
.gitignore:
空行或是以#開頭的行即註釋行將被忽略;
以斜槓 “/” 結尾表示目錄;
以星號 “*” 通配多個字符;
以問號 “?” 通配單個字符;
以方括號 “[]” 包含單個字符的匹配列表;
以歎號 “!” 表示不忽略(跟蹤)匹配到的文件或目錄;
可以在前面添加斜槓 “/” 來避免遞歸,下面的例子中可以很明白的看出來與下一條的區別。
示例:
# 忽略 .a 文件
*.a
# 但否定忽略 lib.a, 儘管已經在前面忽略了 .a 文件
!lib.a
# 僅在當前目錄下忽略 TODO 文件, 但不包括子目錄下的 subdir/TODO
/TODO
# 忽略 build/ 文件夾下的所有文件
build/
# 忽略 doc/notes.txt, 不包括 doc/server/arch.txt
doc/*.txt
# 忽略所有的 .pdf 文件 在 doc/ directory 下的
doc/**/*.pdf
======================================================================================================
自動推送(hooks)設置:
裸庫下的hooks目錄,例如:/home/web.git/hooks
vim post-receive
輸入:
#!/bin/bash
git --work-tree=/yjdata/www/www/web checkout -f
保存退出
chmod u+x post-receive
chown git:nginx post-receive
======================================================================================================
小結:
場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- file | *
場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操作。
場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫。(git reset --hard 文件或者版本ID)
git reset --hard 的誤操作的解決辦法
git reflog
git reset --hard 版本
自己的遠程分支版本回退的方法
如果你的錯誤提交已經推送到自己的遠程分支了,那麼就需要回滾遠程分支了。
首先要回退本地分支:
git reflog
git reset --hard f07e7ba
緊接着強制推送到遠程分支:
git push -f
注意:本地分支回滾後,版本將落後遠程分支,必須使用強制推送覆蓋遠程分支,否則無法推送到遠程分支
======================================================================================================
# 添加指定文件到暫存區
$ git add [file1] [file2] ...
# 添加指定目錄到暫存區,包括子目錄
$ git add [dir]
# 添加當前目錄的所有文件到暫存區
$ git add .
# 添加每個變化前,都會要求確認
# 對於同一個文件的多處變化,可以實現分次提交
$ git add -p
# 刪除工作區文件,並且將這次刪除放入暫存區
$ git rm [file1] [file2] ...
# 停止追蹤指定文件,但該文件會保留在工作區
$ git rm --cached [file]
# 改名文件,並且將這個改名放入暫存區
$ git mv [file-original] [file-renamed]
四、代碼提交
# 提交暫存區到倉庫區
$ git commit -m [message]
# 提交暫存區的指定文件到倉庫區
$ git commit [file1] [file2] ... -m [message]
# 提交工作區自上次commit之後的變化,直接到倉庫區
$ git commit -a
# 提交時顯示所有diff信息
$ git commit -v
# 使用一次新的commit,替代上一次提交
# 如果代碼沒有任何新變化,則用來改寫上一次commit的提交信息
$ git commit --amend -m [message]
# 重做上一次commit,幷包括指定文件的新變化
$ git commit --amend [file1] [file2] ...
五、分支
# 列出所有本地分支
$ git branch
# 列出所有遠程分支
$ git branch -r
# 列出所有本地分支和遠程分支
$ git branch -a
# 新建一個分支,但依然停留在當前分支
$ git branch [branch-name]
# 新建一個分支,並切換到該分支
$ git checkout -b [branch]
# 新建一個分支,指向指定commit
$ git branch [branch] [commit]
# 新建一個分支,與指定的遠程分支建立追蹤關係
$ git branch --track [branch] [remote-branch]
# 切換到指定分支,並更新工作區
$ git checkout [branch-name]
# 切換到上一個分支
$ git checkout -
# 建立追蹤關係,在現有分支與指定的遠程分支之間
$ git branch --set-upstream [branch] [remote-branch]
# 合併指定分支到當前分支
$ git merge [branch]
# 選擇一個commit,合併進當前分支
$ git cherry-pick [commit]
# 刪除分支
$ git branch -d [branch-name]
# 刪除遠程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch] 例如:git branch -dr origin/zm
# 恢復暫存區的指定文件到工作區
$ git checkout [file]
# 恢復某個commit的指定文件到暫存區和工作區
$ git checkout [commit] [file]
# 恢復暫存區的所有文件到工作區
$ git checkout .
# 重置暫存區的指定文件,與上一次commit保持一致,但工作區不變
$ git reset [file]
# 重置暫存區與工作區,與上一次commit保持一致
$ git reset --hard
# 重置當前分支的指針爲指定commit,同時重置暫存區,但工作區不變
$ git reset [commit]
# 重置當前分支的HEAD爲指定commit,同時重置暫存區和工作區,與指定commit一致
$ git reset --hard [commit]
# 重置當前HEAD爲指定commit,但保持暫存區和工作區不變
$ git reset --keep [commit]
# 新建一個commit,用來撤銷指定commit
# 後者的所有變化都將被前者抵消,並且應用到當前分支
$ git revert [commit]
# 暫時將未提交的變化移除,稍後再移入
$ git stash
$ git stash pop
======================================================================================================
常見問題:
一、解決git push/git clone代碼速度太慢:
1.使用管理員權限打開hosts文件
sudo vim /etc/hosts
2.在該文件末尾空一行填入
151.101.72.249 github.global.ssl.fastly.net
修改之後速度由10k20k左右增到500k-1000k左右
-------------------------------------------------------------------------------------------------------
二、檢出大項目報錯,curl的postBuffer默認值太小:
如果項目比較複雜龐大,檢出會出現這個錯誤,就是因爲curl的postBuffer默認值太小的原因,重新在終端配置一下這個值就可以:
git config --global http.postBuffer 1048576000 (這個值是kb 1G,根據具體項目大小修改)
--global配置對當前用戶生效,如果需要對所有用戶生效,則用--system
然後檢查一下是否配置成功:
git config --list