git小技巧

在使用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


二、解決 Agent admitted failure to sign using the key 問題 with ssh

之前如果建立 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登錄

1、安裝putty完整安裝包;
2、使用puTTygen生成puTTY格式的私鑰,Load->選擇私鑰文件->另存爲.ppk文件,啓動Pageant,將生成的私鑰加到代理中Add Key;
3、設置cygwin的環境變量:export GIT_SSH=/cygdrive/e/Program\ Files/PuTTY/plink.exe;
4、先使用plink.exe命令緩存一下SSH連接:/cygdrive/e/Program\ Files/PuTTY/plink.exe -T -i F:/Tools/Programs/Git/cygwin/home/Administrator/.ssh/ddkangfu.ppk [email protected];
5、使用clone命令克隆代碼:git clone [email protected]:ddkangfu/evaluation.git
6、如果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。
7、在使用git時,在未添加.ignore文件前使用 git add . 將所有文件添加到庫中,不小心將一些不需要加入版本庫的文件加到了版本庫中。由於此時還沒有提交所以不存在HEAD版本,不能使用 git reset HEAD命令。
解決:(1)使用git rm -r --cached .
        (2)可以運行git reset FILE`, 他可以將File從當前要提交的文件集合中移除(未驗證), git reset HEAD yourfile


四、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

wKiom1MA0v-horoSAAS4v41ef_U068.jpg


五、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替換爲你想要合併的分枝名即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章