Git 用法总结
GUI 客户端软件其实也是调用的 git 接口,有时候 git 命令操作起来更方便
git config --global user.name calvinLinux 环境下默认是 nano 编辑器
git config --global core.editor /usr/bin/vim这个最好设置一下,因为下面的rebase等命令会需要用来编辑文本
git config --global core.excludesfile /Users/zhangwen/.gitignore_globalgithub 开源了一个收集各个语言、系统环境相关的gitignore (opens in a new window)
git config --global http.proxy socks5://127.0.0.1:1086git config --global https.proxy socks5://127.0.0.1:1086git config --global http.sslverify false指定域名代理:git config --global http.https://github.com.proxy socks5://127.0.0.1:1086
使用命令rebase。假设有三段提交历史,如下:
commit 7efebeb
commit c2e9a92
commit 4f4c6f8
现在要把7efebeb和c2e9a92合并为一个,使用命令:
git rebase -i 4f4c6f8-i的参数表示不需要合并的提交,然后会自动进入 vim 的编辑界面:
pick c2e9a92 设置数据的基类 pick 7efebeb 修改model
## Rebase 4f4c6f8..7efebeb onto 4f4c6f8 (2 command(s))有几个命令需要注意:
- pick 使用这个提交,缩写 p
- squash 使用这个提交合并到前一个提交,缩写 s
- drop 丢弃提交,缩写 d
现在把第二行的pick改成s,然后保存退出:wq。然后会自动进入编辑新 commit 记录的界面,非#开头的内容都当做历史记录,然后保存退出:wq,自动提交成功了。
取消合并使用命令:
git rebase --aborttag 一般是版本号,经常需要使用最新的版本号当做文件名的一部分,命令如下:
git describe --tags --abbrev=0网站上没有提供操作按钮,只能使用命令行操作在本地删除之后,再推送到服务器:
git tag -d [tag]git push origin :[tag]如果不行的话,第二条命令改成下面这种:
git push origin :refs/tags/[tag]HEAD是指当前分支,每次checkout改变分支,它就会指向哪里。有时分支没有名字,此时就变成detached(游离)状态的。
经常在 submodule 里面,当你直接在 submodule 修改代码并提交后,再切换回master,刚刚提交的代码不见了,而且HEAD分支也不见了。
但刚刚提交的代码还在 git 里面,并没有丢失,此时可以用git reflog查看提交记录,找到刚刚的提交记录,假设为247e11b,执行下面的命令即可:
## 切换到 247e11b,此时是 detachedgit checkout 247e11b## 把 detached 分支保存下来,命名为 diff 分支git checkout -b diff## 切换到 master 分支git checkout master## 合并 diff 到 mastergit merge diffGitHub 项目和公司的项目一般会有不同的姓名和邮箱,要自动区分不同域名的 git 地址,一般会选择创建两个 ssh key,然后分别在服务器里面配置。
现在发现一个 git v2.13 之后的新功能,includeIf可以根据不同的目录,加载不同的配置文件,官方文档点击链接 (opens in a new window)。
在~/.gitconfig里面增加如下格式配置:
[includeIf "gitdir:~/to/group/"] path = /path/to/xxx.gitconfig上面这段配置的意思是:在 ”~/to/group/“目录下的所有 git 项目,自动加载”/path/to/xxx.gitconfig”的配置,重复的会被后面的覆盖掉。
假如默认是 GitHub 的账号,~/.gitconfig的用户名和邮箱配置如下:
[user] name = github_name公司的 git config 定义在~/.alibaba.gitconfig:
[user] name = Jack~/projects/github/是开源项目目录,~/projects/alibaba/公司的项目目录,那配置参数如下:
[includeIf "gitdir:~/projects/alibaba/"] path = ~/.alibaba.gitconfig注意点:
- 目录最后一定是
/结尾 - 如果要忽略目录的大小写,比如 Windows 下,
gitdir:~/to/group/换成gitdir/i:~/to/group/即可
添加单独的 remote 仓库
git remote add origin 你的Gitlab仓库地址git remote add github 你的Github仓库地址在同一个 remote 里面再加一个地址
git remote set-url --add origin 你的Gitee地址