git上传文件操作

350 阅读6分钟

发现有时间还是需要研究一下git的提交实现的流程 不知道为什么.git里的obj文件夹突然多了一百多兆的缓存,因为是隐藏的,找了半天

声明身份的
$ git config --global user.name (你的名字)

$ git config --global user.email (你的邮箱)

一般项目(只有一个master分支)

git clone (项目地址)
git add .
git commit -m 评论
git push

多分支项目

git clone (项目地址)
git add .
git commit -m 评论
git push origin master //git push <远程主机名> <远程分支名>

如何强制从远程仓库覆盖本地仓库

//我发现直接git pull总是覆盖不了
git reset --hard HEAD
git pull

报错案例

failed to push some refs to '(项目地址)'

git push时,需要保证同级里有md文件
不然就会报错

To (项目地址)
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to '(项目地址)'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

//好像有时有md文件也会报这个错误
//用git push -u origin master -f 好像就可以了
//是需要记录push到远端分支的默认值吗?


若没有经过clone,也就是没有.git文件时
需要给本地仓库 git init 初始化一下
然后
git remote add origin (项目地址)
添加远程仓库地址
更改远程仓库地址
git remote rm origin

文件超过100m

清理已经commit的文件

.gitignore只对从来没有commit过的文件起作用。已经commit了的需要

git rm --cached stupid.txt //从版本库中rm 文件

如果要删除目录下所有文件包括子目录中的

git rm -r --cached directory_name

在.gitignore中添加要忽略的文件

commit

push

其他成员pull,working directory中对应的文件会删除,所以如果文件重要,要提前备份。

Git objects文件夹下大文件清理

最近遇到git上工程突然变得很大,原因是.git/objects/pack 文件过大,之前上传过大文件,文件虽然删除,但是记录还在。 我的方法:

直接把之前的.git文件删掉,重新初始化一个本地仓库

网络方法:

# 例如:查询最大的三个文件的信息
git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -3

# 查询对应文件的位置和文件名
git rev-list --objects --all | grep 对应文件的编码(上面命令结果中获取)

# 处理文件,将文件从历史记录中移除
git filter-branch --index-filter 'git rm --cached --ignore-unmatch  文件名(带路径,上面命令结果中获取)'

rm -rf .git/refs/original
git reflog expire --expire=now --all
git fsck --full --unreachable
git repack -A -d
git gc --aggressive --prune=now

# 提交
git push --force

详解

  • git status 查看工作区代码相对于暂存区的差别

  • git add . 将当前目录下修改的所有代码从工作区添加到暂存区 . 代表当前目录

  • git commit -m ‘注释’ 将缓存区内容添加到本地仓库

  • git pull origin master先将远程仓库master中的信息同步到本地仓库master中

  • git push origin master 将本地版本库推送到远程服务器,
    origin是远程主机,master表示是远程服务器上的master分支和本地分支重名的简写,分支名是可以修改的

Git add

git add [参数] <路径> 作用就是将我们需要提交的代码从工作区添加到暂存区,就是告诉git系统,我们要提交哪些文件,之后就可以使用git commit命令进行提交了。
为了方便下面都用 . 来标识路径, . 表示当前目录,路径可以修改,下列操作的作用范围都在版本库之内。

  1. git add . 不加参数默认为将修改操作的文件和未跟踪新添加的文件添加到git系统的暂存区,注意不包括删除
  2. git add -u . -u 表示将已跟踪文件中的修改和删除的文件添加到暂存区,不包括新增加的文件,注意这些被删除的文件被加入到暂存区再被提交并推送到服务器的版本库之后这个文件就会从git系统中消失了。
  3. git add -A . -A 表示将所有的已跟踪的文件的修改与删除和新增的未跟踪的文件都添加到暂存区。

Git commit

git commit 主要是将暂存区里的改动给提交到本地的版本库。每次使用git commit 命令我们都会在本地版本库生成一个40位的哈希值,这个哈希值也叫commit-id,
commit-id 在版本回退的时候是非常有用的,它相当于一个快照,可以在未来的任何时候通过与git reset的组合命令回到这里.

git commit -m ‘message’

-m 参数表示可以直接输入后面的“message”,如果不加 -m参数,那么是不能直接输入message的,而是会调用一个编辑器一般是vim来让你输入这个message,\
message即是我们用来简要说明这次提交的语句。

git commit -am ‘message’ -am等同于-a -m

-a参数可以将所有已跟踪文件中的执行修改或删除操作的文件都提交到本地仓库,即使它们没有经过git add添加到暂存区,\
*注意:* 新加的文件(即没有被git系统管理的文件)是不能被提交到本地仓库的。

Git push

在使用git commit命令将修改从暂存区提交到本地版本库后,只剩下最后一步将本地版本库的分支推送到远程服务器上对应的分支了,如果不清楚版本库的构成,可以查看我的另一篇,git 仓库的基本结构。

git push的一般形式为 git push <远程主机名> <本地分支名> <远程分支名>

例如 git push origin master:refs/for/master ,即是将本地的master分支推送到远程主机origin上的对应master分支, origin 是远程主机名。第一个master是本地分支名,第二个master是远程分支名。

git push origin master

如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建

git push origin :refs/for/master

如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,等同于 `git push origin –delete master`

git push origin

如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支

git push

如果当前分支只有一个远程分支,那么主机名都可以省略,形如 git push,可以使用git branch -r ,查看远程的分支名

其它小技巧

image.png

可以用命令快速创建文件夹
mkdir 加盘符
mkdir D:\666 就是在d盘下创建666文件夹