分类 git 下的文章

git撤销错误提交commit


起步

commitpush到github之后,惊讶发现测试代码没删除,一些信息直接输出出来了,解决方法自然有去掉调试信息后重新commit,但想想后续会带来不必要的麻烦,而且万一提交的是公司服务器ip账号密码等信息就可怕了。


解决git for windows下的Filename too long


问题

从github克隆一个项目下发出现了错误:

git_filename_too_long.png

git有可以创建4096长度的文件名,然而在windows最多是260,因为git用了旧版本的windows api,为此踩了个坑。

解决

打开git命令行:

git config --global core.longpaths true

开开心心克隆吧。


git的.gitignore忽略文件


起步

一个项目难免会有一些文件不需要纳入git管理,也不希望他们出现在未跟踪列表,如日志文件,缓存文件,java编译的.class文件或临时文件等.这种情况下,就可以创建一个名为.gitignore文件.windows下不能创建.开头文件的问题自行解决。

配置语法

  • 所有空行或者以 # 开头的行都会被 Git 忽略。
  • 可以使用标准的 glob 模式匹配。
  • 匹配模式可以以 / 开头防止递归。
  • 匹配模式可以以 / 结尾指定目录。
  • 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号 ! 取反。


git 2.0的push


起步

好久没用linux了,命令都不熟悉了.linux下安装的git版本比较新,2.x版本,在push时候收到了下面的报错:

$ git push
warning: push.default 尚未设置,它的默认值在 Git 2.0 从 'matching'
变更为 'simple'。若要不再显示本信息并保持传统习惯,进行如下设置:

  git config --global push.default matching

若要不再显示本信息并从现在开始采用新的使用习惯,设置:

  git config --global push.default simple

当 push.default 设置为 'matching' 后,git 将推送和远程同名的所有
本地分支。

从 Git 2.0 开始,Git 缺省采用更为保守的 'simple' 模式,只推送当前
分支到远程关联的同名分支,即 'git push' 推送当前分支。

参见 'git help config' 并查找 'push.default' 以获取更多信息。
('simple' 模式由 Git 1.7.11 版本引入。如果您有时要使用老版本的 Git,
为保持兼容,请用 'current' 代替 'simple')

Matching

matching 参数是 Git 1.x 的默认行为,其意是如果你执行 git push 但没有指定分支,它将 push 所有你本地的分支到远程仓库中对应匹配的分支。

Simple

而 Git 2.x 默认的是 simple,意味着执行 git push 没有指定分支时,只有当前分支会被 push 到你使用 git pull 获取的代码。

修改默认设置

从上述消息提示中的解释,我们可以修改全局配置,使之不会每次 push 的时候都进行提示。对于 matching 输入如下命令即可:

$ git config --global push.default matching

而对于 simple ,请输入:

$ git config --global push.default simple

实用的git别名


程序员都是"懒惰"的,哪怕是执行一个命令的时候少敲了一个字母也感觉特舒坦。Git就允许为命令设置别名。 类似 git status 都要敲那么多字母。如果把status换成st,这种机(tou)智(lan)的做法用着很有魔性。

$ git config --global alias.st status

这句话就是让git明白,我把status取了外号叫st了,以后老子喊st就表示status了。 这时再敲下git st试试。 下面分享我常用的别名设置。

git config --global alias.l  "log --color --graph --decorate --pretty=oneline --abbrev-commit"
git config --global alias.l0 "log --color --graph --decorate --pretty=oneline --abbrev-commit -U0"
git config --global alias.la "log --color --graph --decorate --pretty=oneline --abbrev-commit --all"
git config --global alias.lb "log --color --graph --decorate --pretty=oneline --abbrev-commit --all --simplify-by-decoration"
git config --global alias.lg "log --color --graph --decorate" 
git config --global alias.dl  "log --date-order --color --graph --decorate --pretty=oneline --abbrev-commit"
git config --global alias.dla "log --date-order --color --graph --decorate --pretty=oneline --abbrev-commit --all"
git config --global alias.dlb "log --date-order --color --graph --decorate --pretty=oneline --abbrev-commit --all --simplify-by-decoration"
git config --global alias.dlg "log --date-order --color --graph --decorate"

git config --global alias.d  "diff --color"
git config --global alias.dc "diff --color --cached"
git config --global alias.d0 "diff --color --unified=0"

git config --global alias.ci "commit --verbose"

git config --global alias.co "checkout"
git config --global alias.tr "checkout --track"

git config --global alias.s  "status --short"
git config --global alias.st "status"