当Git本地仓库重新复制出一份时 首次Pull会很慢需要耐心等待。??因为文件路径要重映射??

GIT GC

"git gc" 是 Git 中的命令,它的全称是 "Git 垃圾回收"。

当你使用 Git 管理项目时,Git 会在你进行各种操作(如提交、分支切换、合并等)时,创建很多中间状态和对象。随着时间的推移,这些中间状态和对象会占用越来越多的磁盘空间,导致仓库变得越来越臃肿,操作变得越来越缓慢。

"git gc" 的作用就是帮助你清理不再使用的 Git 对象和中间状态,从而回收磁盘空间,减小仓库大小。

这个命令会自动找出不再被引用的对象,将它们删除,并将被删除对象占用的磁盘空间释放出来。

执行 "git gc" 命令后,Git 会将仓库中的所有未被引用的对象进行垃圾回收,从而提高仓库性能和空间利用率。

出现下面的提示是因为提交的改动过多,导致本地的缓冲区占用太大。

warning: There are too many unreachable loose objects; run 'git prune' to remove them.

执行 git gc 可以清理优化本地的git项目

GIT rebase 和 merge的区别

rebase

通过更换基底的方式来提供一套清晰的代码提交历史,但没有办法溯源,会将分支上的提交与主干上的最新新的结点逐一进行合并操作(合并后是的节点是一个解决冲突后全新的结点)。

图解:

alt

前提条件:从origin分支的c2节点创建新的分支mywork并有两个新的提交c5和c6,同时origin也产生了两个新的提交c3和c4。

rebase操作:将mywork分支的基底由原来的c2更改为origin分支的最新提交c4 (将origin上的最新提交变为mywork的新基底),会先将mywork中原先基底的全部提交暂存下来,然后删除,再找到origin的最新提交位置并将mywork的所有新的提交(c5、c6)会逐一与新基底(c4)处理冲突,并得到全新的分支(c5'、c6')。

(拉取最新的代码和合并分支时都可以用到rebase操作)

merge

产生很多合并节点,使提交历史很乱,可以溯源知道某个节点的具体提交。

图解:

alt

前提条件:从origin分支的c2节点创建新的分支mywork并有两个新的提交c5和c6,同时origin也产生了两个新的提交c3和c4。

merge操作:将两个分支的最新提交进行冲突处理形成一个全新节点。

reset

将当前版本恢复到之前的某个版本。

(在当前版本有错误无法进入项目时,使用该命令恢复之前版本继续开发)

revert

撤销某次提交。

(某个远端的单个提交不满足需求时;revert、commit and push)

cherry-pick

将某个分支的单次提交作为一次新的提交在现在的分支上。

(当某个分支实现的功能在当前分支也需要时,注意cherry-pick的单次提交最好不要包含其他功能)

git切换远程仓库

方法一: git remote set-url origin URL URL为新地址 方法二: git remote rm origin 删除现有远端仓库 git remote add origin URL 添加新的远程仓库 URL为新地址

查看远端仓库的方法:git remote -v 或者打开.git文件夹中的config文件查看。

git 补丁 git patch

参考链接

将不同分支或提交之间的更改保存为一个可重用的文件格式。通常以.patch或.diff为扩展名。可以使用补丁进行代码迁移。

.diff的扩展名是通过git diff生成的。.patch的扩展名是通过git format-patch生成的。

通过 git diff 生成的文件不含有 commit 信息,可以指定文件生成 diff,也可以指定单个 commit, 多个 commit 生成 。通过 git format-patch 生成的 .patch 文件 含有 commmit 信息。一个 commit 对应一个 patch 文件。

示例: 使用git format-patch创建补丁:

git format-patch HEAD~1
//将最新的一次提交的前一个提交转换为补丁文件。HEAD~1 表示最新的一次提交的前一个提交
git format-patch [commitID]
//为指定的commit创建补丁  
可以通过 git log 查看commitID 后面添加 -n 可以查看最新的n次提交的log
git format-patch 【commitID】..【commitID】
//为某两次提交之间的全部提交创建补丁

使用git diff 创建补丁:

//为修改中的指定文件生成补丁
git diff  Test.txt > Text.patch
//所有的修改文件打成  patch
git diff > Test.patch

应用补丁:

git apply --stat <patch-file>...
//应用补丁;<patch-file>补丁文件的路径;也可以应用多个补丁
git apply --check <patch-file>
//检查补丁是否应用成功
git am <patch-file>
//将分支应用到当前分支,并将其作为新的Git提交记录保存下来

git Submodule git子模块

链接