git 操作
收集一些不怎么常用的git
操作,以做记录
➡️git 合并操作
通过git log
查看提交记录及其commitId
再通过git reset --soft commitId
来回退版本(–soft 和 --hard的区别就是 --soft是软回退,会将你这次commitId之后的提交全部回退到暂存区中,–hard会将你
这次commitId之后的提交全部清除掉)
此时你这次commitId之后的提交都会回到暂存区中
git commit -m 随便写注释
➡️git 忽略文件操作
git
忽略文件文件可以用.gitignore
文件来实现,但如果一个文件已经被跟踪,再加入.gitignore
文件就无效了。
这时可以git rm --cached
,再更新.gitignore
,忽略掉目标文件,最后再提交。
使用命令git update-index --assume-unchanged 文件
来标记文件,使git
停止关注这个需要被忽略的文件,这样也可以达成效果,但是这是一种不合理不规范的做法。
原因如下:
首先,git update-index
的定义是:
Register file contents in the working tree to the index(把工作区下的文件内容注册到索引区)
也就是说update-index
针对的是git
数据库里被记录的文件,而不是那些需要忽略的文件。
接着看关于--assume-unchanged
的描述:
When the “assume unchanged” bit is on, Git stops checking the working tree files for possible modifications, so you need to manually unset the bit to tell Git when you change the working tree file. This is sometimes helpful when working with a big project on a filesystem that has very slow lstat(2) system call (e.g. cifs).
应用了该标识之后,Git 停止查看工作区文件可能发生的改变,所以你必须 手动 重置该标识以便 Git 知道你想要恢复对文件改变的追踪。当你工作在一个大型项目中,这在文件系统的lstat
系统调用非常迟钝的时候会很有用。
也就是说这个命令本身只是一种让git
暂时忽略文件变动的操作。
主要是在修改一些大型文件时,防止git
来回计算文件变化并更新工作区造成卡顿。git update-index --assume-unchanged
的官方推荐用法是这样的:
- 你正在修改一个巨大的文件,你先对其
git update-index --assume-unchanged
,这样Git
暂时不会理睬你对文件做的修改; - 当你的工作告一段落决定可以提交的时候,重置改标识:
git update-index --no-assume-unchanged
,于是Git
只需要做一次更新,这是完全可以接受的了; - 提交推送。
另外,根据文档的进一步描述:
This option can be also used as a coarse file-level mechanism to ignore uncommitted changes in tracked files (akin to what .gitignore does for untracked files).
也就是说官方并不推荐这种做法,样的事情更应该用.gitignore
文件来实现(针对未追踪的文件)。
随之而来的新问题是,为什么已经被跟踪的文件.gitignore
会失去效果?
这是因为我们误解了.gitignore
文件的用途,该文件只能作用于Untracked Files
,也就是那些从来没有被git
记录过的文件(自添加以后,从未 add 及 commit 过的文件)。
之所以你的规则不生效,是因为那些文件曾经被git
记录过,因此.gitignore
对它们完全无效。
因此,正确的做法应该先是git rm --cached
,再更新.gitignore
,忽略掉目标文件,最后再提交。
➡️git 撤回合并
1 | git merge --abort |