代理
git config --global http.proxy http://10.80.0.195:8088
git config --global https.proxy http://10.80.0.195:8088
删除大文件
1.删除提交到缓冲区的大文件
git rm -r --cache <dir/file>
git commit -m "log说明"
2.过滤掉文件跟踪历史
#方案一
#删除所有提交历史,删除跟踪文件。
#可用于大文件删除跟踪历史提交记录
git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch <dir/file>' HEAD
#方案二
#忽略本次跟踪
git update-index --assume-unchanged <dir/file>
如果需要恢复跟踪:git update-index --no-assume-unchanged <dir/file>
分支合并冲突解决
1.查看产生冲突的文件
git diff --name-only --diff-filter=U
git取消文件或文件夹追踪
公共设置(针对仓库生效,所有人共享该设置。被忽略的文件不会出现在仓库中)
-
创建仓库时,在本地仓库根目录,创建.gitignore文件,写入忽略规则。规则可以是文件名,或者正则表达式。git 对于 .gitignore配置文件是按行从上到下进行规则匹配的。对于.gitignore文件本身的修改也会被提交到远程端。
-
删除已经被追踪过的文件(远程仓库中对应的文件或文件夹会被删除)
.gitignore只能忽略那些原来没有被track的文件。已经被追踪的过的文件,需要先用如下语句删除追踪,再添加到.gitignore中防止下次被追踪。该操作会删除远程仓库中对应的文件或文件夹。
git rm --cached readme1.txt 删除readme1.txt的跟踪,并保留在本地。
git rm -r --cached dir1 删除dir1目录,并保留在本地。
git rm --f readme1.txt 删除readme1.txt的跟踪,并且删除本地文件。
本地设置(针对本地文件生效,不会影响其他人的跟踪设置)
-
将忽略规则写在 .git/info/exclude中,语法同.gitignore。exclude文件不会被提交到远程端。被设置为忽略的文件,本地修改不会提交远程端,但其他人的修改依然不受影响。适合忽略一些本地配置文件。
-
忽略已经被追踪过的文件
git update-index --assume-unchanged /path/file #设置忽略跟踪
git update-index --no-assume-unchanged /path/to/file #恢复跟踪
本地忽略被追踪过的文件还可以使用以下设置:
git update-index --skip-worktree /path/file
assume-unchanged 与 skip-worktree 的区别如下:
assume-unchanged:这个会关闭文件与远程仓库的跟踪,认为这个文件远程仓库是不会修改,所以每次pull都是本地的文件
skip-worktree:这个不会关闭文件与远程仓库的跟踪,只是告诉Git不要跟踪对本地文件/文件夹的更改。如果远端仓库内容有变化,pull时会拉取最新的变化,并提示冲突,但因为没有跟踪本地更改,所以需要no-skip-worktree再合并最新的变化。
stash存储
项目场景:
现在的Bug你还没有解决,而上边又给你派了一个新的Bug,而这个Bug相比较现在正在苦思冥想的Bug比较容易解决。
你想先解决新的Bug,可是之前的Bug还没有解决完而不能提交。怎么办?
问题描述:
当我们正常使用Git切换分支时,会出现以下提示(请在切换分支之前提交您的更改或隐藏它们)
Please commit your changes or stash them before you switch branches.
在这里插入图片描述
解决方案:
-
因为当前的分支dev 最初也是从master 分支上衍生出来的。而此时你要再从该分支上切换到其主分支。那么你需要先把该dev分支上的改动提交后才能切换,但是该dev分支上还没有完成全部的修改,你不想提交。那么此时你就要选择 stash (存放)它们(你在当前分支上改动的却没有提交commit的内容)。
所以第一步,在当前分支上执行git stash
命令。将当前分支存起来,id为 807be186826 -
这时候再执行
git status
命令,显示没有东西需要提交,接着就可以在主分支master上创建并切换到新的分支去修复另一个Bug了。 -
那修改完那个Bug也提交后,就该回到dev 分支上去继续修改那个未完成的Bug。
执行git checkout dev
切换到 dev 分支,这个时候执行git status
命令仍旧显示没有东西需要提交。毕竟我们前边已经成功将dev上未提交的改动给“隐藏“了,这时,用 $git stash list
命令去查看我们“存储”的列表。
在这里插入图片描述
会发现id 为 807be186826 的储藏项目在列表中,我们需要将其恢复,有两个办法:一、用
git stash apply
命令恢复,但是恢复后,stash内容并不删除,这时候再执行 $git stash list
命令,id 为 807be186826 的储藏项目还会在列表中,你需要用git stash drop
来删除;注意: 如果有一个分支上多个 stash,如果需要恢复指定的 stash ,可以在命令尾部加id,如 $
git stash apply stash@{0}
,同样删除指定 stash 项目则执行如 $git stash drop stash@{1}
。二、用
git stash pop
命令,恢复的同时把 stash 存储列表的内容也删了。这时候再执行git stash list
命令,id 为 807be186826 的储藏项目不会在列表中。此时再查看 会发现之前的改动还存在,且执行 git status 就会继续显示该分支上有改动未提交。
压缩.git
如果你不想删除某些文件的历史记录,可以使用 git gc 来优化仓库:
git reflog expire --expire=now --all
git gc --prune=now --aggressive
让 master 分支只保留 14 天期,而 develop 分支可以保留完整记录,那么你可以这样设定:(注意: 以下范例把设定储存在本地仓库中,所以使用了 --local 参数)
git config --local gc.master.reflogExpire "14 days"
git config --local gc.master.reflogExpireUnreachable "14 days"
git config --local gc.develop.reflogExpire "never"
git config --local gc.develop.reflogExpireUnreachable "never"