git小技巧

在使用git過程當中記錄的一些小技巧,但願對你們能有所幫助。html


1、完全刪除倉庫中的無效文件git

git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch path/to/your/file' HEAD
git push origin master --force
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now


2、解決 Agent admitted failure to sign using the key 問題 with sshgithub

以前若是創建 ssh 鏈接,只要將公鑰複製到 ~/.ssh/authorized_keys 就能夠利用公鑰登入,而不須要創建密碼。
如今的 ssh 使用一樣的方法會出現錯誤信息:
Agent admitted failure to sign using the key
解決方法:
使用 ssh-add 指令將私鑰加進來(根據我的的密匙命名不一樣更改 id_rsa)
# ssh-add   ~/.ssh/id_rsa
若是遇到錯誤:Could not open a connection to your authentication agent.
請先執行:ssh-agent bash

緩存

使用putty進行OSChina的SSH登陸

一、安裝putty完整安裝包;
二、使用puTTygen生成puTTY格式的私鑰,Load->選擇私鑰文件->另存爲.ppk文件,啓動Pageant,將生成的私鑰加到代理中Add Key;
三、設置cygwin的環境變量:export GIT_SSH=/cygdrive/e/Program\ Files/PuTTY/plink.exe;
四、先使用plink.exe命令緩存一下SSH鏈接:/cygdrive/e/Program\ Files/PuTTY/plink.exe -T -i F:/Tools/Programs/Git/cygwin/home/Administrator/.ssh/ddkangfu.ppk git@git.oschina.net;
五、使用clone命令克隆代碼:git clone git@git.oschina.net:ddkangfu/evaluation.git
六、若是pull一個分支的時候遇到以下錯誤時:
$ git pull develop origin/develop
fatal: 'develop' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
執行命令:
git branch --set-upstream develop origin/develop
而後再pull。
七、在使用git時,在未添加.ignore文件前使用 git add . 將全部文件添加到庫中,不當心將一些不須要加入版本庫的文件加到了版本庫中。因爲此時尚未提交因此不存在HEAD版本,不能使用 git reset HEAD命令。
解決:(1)使用git rm -r --cached .
        (2)能夠運行git reset FILE`, 他能夠將File從當前要提交的文件集合中移除(未驗證), git reset HEAD yourfile
bash


4、git-flow --> 一個成功的Git分支模型

介紹:http://nvie.com/posts/a-successful-git-branching-model/
翻譯:http://www.juvenxu.com/2010/11/28/a-successful-git-branching-model/
工具:https://github.com/nvie/gitflow
git-flow備忘清單:http://danielkummer.github.io/git-flow-cheatsheet/index.zh_CN.html app

wKiom1MA0v-horoSAAS4v41ef_U068.jpg


5、git diff用法解釋

git diff 比較的是工做目錄樹與暫存區之間的區別。
git diff --cached 比較的是暫存區和版本庫最後一個版本的區別。
git diff HEAD 比較的是工做目錄樹(包括暫存的和未暫存的修改)與版本庫最後一個版本的差異。
git diff v1.6.0 -- README 從一個特定點開始文件的修改狀況(查看建立v1.6這個標籤以後README文件所發生的修改)
git diff v1.0 v1.1 兩次提交的差別比對(對兩次快照作差別比對,也即項目的兩個版本之間比對--直接在git diff後跟上要比對的兩個版本號便可)
git diff v1.6.1.1 v1.6.1.2 --stat 顯示v1.6.1.1和v1.6.1.2兩個版本之間差別的統計數字,還能夠深刻查看某個具體文件的變動比對:git diff v1.6.1.1 v1.6.1.2 -- sha1_file.c
git diff ...(branch) 在合併某分枝前查看變動內容(舉例來講,若是你建立了一個'dev'的分枝,進入這個分枝給lib/simplegit.rb添加了一個函數,而後回到了'master'分枝,刪除了README文件的一行,而後運行:
    git diff master dev 結果會顯示你給某個文件中添加了方法,還往README文件添加了一行內容。爲何會這樣?由於對'dev'分枝來講,README文件仍是原樣,而在'master'上,你已經刪掉了一行,這樣直接對兩個快照進行對比就好似'dev'分枝添加了一行進去同樣。你想查看的其實是在建立dev分枝以後在這條分枝上的差別對比,因此應該執行這樣的命令:git diff master...dev 這就不會拿master分枝上最後一個快照和dev分枝上最後一個快照進行比對--而是用dev與master所交的那個分歧點和如今的dev分枝上最後一個快照進行比對。在咱們這個例子中,這樣比對的結果是顯示對那個文件添加了一個函數。若是你目前正處在master分枝上,你能夠運行:git diff ...dev跟上面的結果是同樣的。因此,若是你想查看將要合併的某個分枝會有什麼樣的變化,能夠執行:git diff ...(branch)將branch替換爲你想要合併的分枝名便可。
ssh

相關文章
相關標籤/搜索