一、基本命令
1.1 版本回退
|
|
1.2 git submodule使用
这其实是 git 的子模块功能,作用是为了在项目中引入另一个项目的部分或全部内容,但是这两个项目是分开开发或管理的,这样直接使用 git submodule 就可以不必要将另一个项目复制一份直接引用即可。
常用 git submodule命令
|
|
具体的关于 git submodule 的说明以及使用,请点击这里
1.3 分支合并
分支合并分为两种情况,一种是本地分支合并,一种是远程分支合并到本地分支
|
|
1.4 代码提交
1.4.1 如何从众多提交中保留只需要的提交
如果说在众多提交中,已某个提交为基准,只保留上游众多提交中的某个或者某几个,可以使用 cherry-pick命令,具体是:
git cherry-pick
如果没有冲突,则回显示如下:
|
|
如果存在冲突,则需要解决冲突然后继续,关于如何冲突,请查看如何处理代码冲突小节
1.4.2 修改最后一次提交
更多参考:http://git.mydoc.io/?t=83152
1.4.5 改写历史,去除大文件
|
|
并告知所有组员,push 代码前需要 pull rebase,而不是 merge,否则会从该组员的本地仓库再次引入到远程库中
1.4.6 恢复已经被删除文件
git checkout commit_id -- path_to_file
可以试一下使用git ls-files -d | xargs -i git checkout {}
不过新的版本开始不支持了!
1.4.7 批量永久删除git中文件
|
|
二、配置
http(s)方式自动记住密码
|
|
如果你原本使用的 ssh 地址想更换成 http(s) 地址,可以执行以下命令:
|
|
CRLF换行输入问题
git 出现warning crlf will be replaced by…
里面的文本文件所使用的换行符,在不同的系统平台上是不一样的。UNIX/Linux 使用的是 0x0A(LF),早期的 Mac OS 使用的是 0x0D(CR),后来的 OS X 在更换内核后与 UNIX 保持一致了。但 DOS/Windows 一直使用 0x0D0A(CRLF) 作为换行符。
跨平台协作开发是常有的,不统一的换行符确实对跨平台的文件交换带来了麻烦。最大的问题是,在不同平台上,换行符发生改变时,Git 会认为整个文件被修改,这就造成我们没法 diff,不能正确反映本次的修改。还好 Git 在设计时就考虑了这一点,其提供2个选项进行操作
autocrlf配置
git config –global core.autocrlf {true|false|input}
参数说明:
- true: 提交时转换为LF,检出时转换为CRLF
- input: 提交时转换为LF,检出时不转换
- false: 提交检出均不转换
在 Windows 上,系统默认配置一般为 true。如果文件编码是 UTF8 并且包含中文字符,那最好还是把 autocrlf 设置为 false。否则,就会遇到我所遇到的问题,Git 尝试将 CRLF 转化为 LF 时失败,导致无法 add 。
如果把 autocrlf 设置为 false 时,那另一个配置项 safecrlf 最好设置为 ture。该选项用于检查文件是否包含混合换行符,其有三个可选项.
safecrlf配置
git config –global core.safecrlf {true|false|warn }
- true: 拒绝提交包含混合换行符的文件
- false: 允许提交包含混合换行符的文件
- warn: 提交包含混合换行符的文件时给出警告
综合方案
mac下,如果有mac和windows开发用户,可以这样设置:
虽然代码能被提交,但是项目中的文件可能会包含两种格式的换行符。而且会有如上提到的问题,文件被视为整个被修改,无法 diff,之所以使用版本控制工具,最重要的原因之一就是其 diff 功能。
最好默认选择LF,或者强制转成LF,没办法,用windows的码农且不会配置LF的太多太多。。。
三、迁移git
3.1
|
|