git学习

代理

 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取消文件或文件夹追踪

公共设置(针对仓库生效,所有人共享该设置。被忽略的文件不会出现在仓库中)

  1. 创建仓库时,在本地仓库根目录,创建.gitignore文件,写入忽略规则。规则可以是文件名,或者正则表达式。git 对于 .gitignore配置文件是按行从上到下进行规则匹配的。对于.gitignore文件本身的修改也会被提交到远程端。

  2. 删除已经被追踪过的文件(远程仓库中对应的文件或文件夹会被删除)
    .gitignore只能忽略那些原来没有被track的文件。已经被追踪的过的文件,需要先用如下语句删除追踪,再添加到.gitignore中防止下次被追踪。该操作会删除远程仓库中对应的文件或文件夹。

        git rm --cached readme1.txt 删除readme1.txt的跟踪,并保留在本地。

        git rm -r --cached dir1  删除dir1目录,并保留在本地。

        git rm --f readme1.txt 删除readme1.txt的跟踪,并且删除本地文件。

本地设置(针对本地文件生效,不会影响其他人的跟踪设置)

  1. 将忽略规则写在 .git/info/exclude中,语法同.gitignore。exclude文件不会被提交到远程端。被设置为忽略的文件,本地修改不会提交远程端,但其他人的修改依然不受影响。适合忽略一些本地配置文件。

  2. 忽略已经被追踪过的文件

   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.

在这里插入图片描述
解决方案:

  1. 因为当前的分支dev 最初也是从master 分支上衍生出来的。而此时你要再从该分支上切换到其主分支。那么你需要先把该dev分支上的改动提交后才能切换,但是该dev分支上还没有完成全部的修改,你不想提交。那么此时你就要选择 stash (存放)它们(你在当前分支上改动的却没有提交commit的内容)。
    所以第一步,在当前分支上执行 git stash 命令。将当前分支存起来,id为 807be186826

  2. 这时候再执行 git status 命令,显示没有东西需要提交,接着就可以在主分支master上创建并切换到新的分支去修复另一个Bug了。

  3. 那修改完那个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"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@晓乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值