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