1忽略某些文件
- 起因
- 項目中經常會生成一些GIt系統不需要追蹤的文件。
- 開發中你會發現項目中到處都有未追蹤的文件。git add 和 git commit -a變得不實用
- 解決方案
- 再頂層工作目錄中添加一個.gitignore的文件,來告訴Git系統要忽略哪些文件。
- .gitignore可以共享,項目開發者也能共享一個忽略文件規則
- 對特定的倉庫起作用: .git/info/exclude和git配置變量core.excludesfile中指定的文件裏
2REBASE
2-1REBASE基本用法
git checkout -b mywork origin
#你對本地分支做了修改,他人對origin分支修改; 產生了“分叉”
- 使用pull命令把origin分支上的修改拉下來合併,看起來像一個新的合併提交
或者 使用git rebase命令,看起來更像一個沒有合併的分支
- 把mywork的每個提交取消掉,並保存爲臨時補丁,在.git/rebase目錄中
- 把mywork分支更新到最新的origin分支
- 應用上面保存的補丁到mywork上
gitrebase發生衝突時,解決衝突
- 解決衝突
- 用git-add命令更新這些命令
- 執行
git rebase --continue
繼續應用餘下的補丁
2-2交互式rebase
關鍵詞:交互式
向別處推送提交之前對他們進行重寫。
對推送之前的提交進行分割、合併或者重排序
git rebase -i origin/master
#查看被rebase的提交
git log github/master..
假如從上一次推送起有5個提交
- 交互式添加:提供友好界面去操作git索引
- 交互式的操作,按照提示進行操作。
儲藏
- 情形:開發中遇到和當前工作不相關bug需要停止當前工作
- 解決方式:使用git stash保存當前的工作狀態, 修復完bug之後執行’unstash’操作回到之前的工作狀態
流程:
git stash "work in progress for foo features"
##1. 將你的本地修改儲存,然後重置工作目錄和索引,恢復到分支上次提交時的狀態
...edit and test...
##2. 修復bug
git commit -a -m "blorpl:typofix"
##3. 修復完bug之後,使用git stash apply恢復以前的工作狀態
git stash apply
儲藏隊列
- git stash list命令查看你保存的儲藏stashes
每執行一次儲藏,就添加到stash隊列中 - git stash clear:清空這個隊列
- git stash apply stash@{l}:使用在隊列中的任意一個儲藏
GIT樹名
用名字表示方法:替代SHA串表示一個提交或是其它git對象
- sha短名
- 只要前綴不重複,一個提交的sha名就不會和其它名字衝突
- 分支,remote或標籤
- 使用分支,remote或標籤名來替代SHA串名
- 日期標識符
- 用日期標註版本
- 順序標識符
- 表示某點前面第N個提交;master@{5}表示master前面第5個提交
- 多個父對象
- 告訴你某提交的第N個直接父提交; master由a,b合併而成;master^2表示分支b
- 波浪號
- 表示一個提交對象的第N級祖父節點
- 樹對象指針
- master^{tree}
- 二進制標識符
- master:/path/to/file得到某對象blob的sha串名
- 區間
- ..表示
追蹤分支
用來聯繫本地分支和遠程分支。
使用情形:
經常從遠程倉庫里拉取分支到本地,但不想用gitpull這種格式
- git clone自動在本地建立一個’master’分支
- 在使用git branch的時候加上’–track’參數
git branch --track experimental origin/experimental
- 運行git pull experimental
- 從origin抓取內容,把遠程的origin/experimental分支合併進本地的experi分支
使用GIT GREP進行搜索
- 不用簽出歷史文件就能查找它們
git grep thingsforgrep
- 參數 -n, –name-only, -c
- -e 組合搜索條件
GIT的撤消操作-重置,簽出和撤銷
用於修復錯誤
- 修復未提交文件中的錯誤(重置)
git reset --hard HEAD
命令會清空所有未提交的內容git checkout -- hello.rb
恢復’hello.rb’
- 修復已提交文件中的錯誤
- 馬上後悔了
- 創建一個新的提交去撤銷老提交所有的的修改
- 修改老提交
- 馬上後悔了
- 創建新提交來修復錯誤
git revert HEAD
創建了一個撤銷了上次提交的新提交git revert HEAD^
:撤銷了上次提交的上次提交git commit
把用於撤銷的提交真正的提交
- 修改提交來修改錯誤
git commit --amend
維護GIT
git靠壓縮歷史信息來節約磁盤和內存空間
git gc
:比較耗時
- 保持可靠性
git fsck進行倉庫的一致性檢查
建立一個公共倉庫
git clone --bare ~/proj proj.git
touch proj.git/git-daemon-export-ok
- 在~/proj目錄創建一個proj.git目錄,這個目錄裏有一個”裸git倉庫”
- 把pro.git目錄拷貝到用來託管公共倉庫的主機上
- 通過git協議或http協議導出git倉庫
建立一個私有倉庫
- 通過ssh協議來訪問倉庫
git clone --bare /home/user/myrepo/.git /tmp/myrepo.git
scp -r /tmp/myrepo.git myserver.com:/opt/git/myrepo.git