Git 操作

65 阅读2分钟

代码库数据统计

列出所有文件

默认只能查看已跟踪的文件,无法查看Untrack文件

git ls-files
查看指定目录下的文件
git ls-files packages/core
查看未跟踪的文件
git ls-files packages/core -u

查看目录下文件的代码行数

git ls-files packages/core | xargs wc -l

分支回滚后代码合并出现问题

git reset

  • 删除指定的commit
  • 再次merge老分支时,被resetcommit还会被引入
  • HEAD指针后移

git revert

  • 用一次新的commit来回滚之前的commit
  • 再次merge老分支时,被resetcommit不会被引入
  • HEAD指针继续往前走,新的commit内容和要revert的内容相抵消

解决git revert操作后merge代码被冲掉的问题

revert的所产生的commitrevert一次

因为git revert是用新的commit来覆盖旧的commit,因此旧的commit等于不会被采用了。如果两个分支(假设是masterA分支)先merge再用revert回滚,之后又将A合并到master,就会发现在master分支上,A分支第一次合并之前的修改大部分不见了。这是因为从时间的发生顺序来看,A分支第一次合并之前的修改发生在revert之前, revert抛弃了A第一合并之前的修改,那么再合并Git就认为你永远抛弃了A第一次之前的修改。

git revert

默认情况下,git revert拒绝恢复merge commit,因为revert commit 的实际含义不明确。假设 HEAD 实际上是一个merge commit

如果想恢复merge commit,必须指定merge 的父节点作为主干,也就是说你想恢复到哪个时候。

通常这将是父数字1,例如,如果你在master,并没有 git 合并不想要,然后决定恢复不想要的合并。第一个父节点是预合并主节点,第二个父节点是不需要的节点。

git revert -m 1 HEAD