批量添加文件:
git add . 添加新文件和被修改文件,不包括被删除文件,包括子目录,但是不包括空目录,并且会根据.gitignore做过滤
git add * 会忽略.gitignore把任何文件都加入
git add -u 监控已经被add的文件, 不会提交新文件
git add -A 添加所有状态的文件,是上面两个功能的合集
只添加指定文件:
git add filename.txt
git add *.txt
git add index/ 添加整个文件夹index
查看文件:
git ls-files 查看已存放文件
git status 查看还没添加的文件
回退:
git reset HEAD <file_name> 未commit,回退某个文件
git checkout -- <file_name> 未commit,回退某个文件
git checkout . 未commit,回退本地所有修改的。没有的提交的,都返回到原来的状态
git checkout <commit HASH> 回退到hash码指定的版本
git reset --hard <commit HASH> 已commit, 返回到某个节点,不保留修改。
git reset --soft <commit HASH> 已commit, 返回到某个节点,保留修改
git reset --hard HEAD^ 已commit,回退到上一个版本, HEAD 和当前 branch 切到上一条commit
git reset --hard HEAD 表示回退当前版本,HEAD指向当前版本
强制覆盖:
git fetch --all
git reset --hard origin/master
git pull
#去掉回车换行转换
git rm -r --cached . 注意 这里是有 "." 的, ". " 代表当前目录
git config core.autocrlf false
提交设置:
git config --global user.name "your git account name"
git config --global user.email "your email with which registered on git"
提交:
git commit -m "..." 提交新文件
git commit -am "..." 只提交修改了的文件
git push
git push -u origin master
查看远程服务器地址URL:
git remote -v
提交大文件报错,假若当前提交含有大文件:
git add .
git commit -m "Initial commit"
git push
提示:Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com
先安装git-lfs:
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash
git reset
apt-get install git-lfs
git lfs install
然后,首先对已经commit的大文件执行回退,也就是回退到上一次的提交点,在项目的本地主目录下执行git log查看commit历史,并获取上次commit对应的序列号,然后执行 git reset <序列号>回退到上一次提交点:
git log
执行后可以看到类似下面的内容:
然后执行 git reset 134a93525c9a2f194edede3f373dd9d7d07cb1a6 回退到commit大文件之前的上一次提交点,再执行下面的步骤(如果不reset到commit大文件之前的上一次提交点,即使执行下面的步骤,在git push时还是会出错,因为已经commit的大文件在git push时会被和.gitattributes文件一起提交,导致每次git push都会失败,仍然报上面的错误):
对所有的大文件都执行git lfs track "filename",然后执行git add .gitattributes,例如:
git lfs track models/c3d/c3d_ucf_model-4999.caffemodel #生成.gitattributes,加入控制
git lfs track yolov5m_tracker.weights #在.gitattributes中添加yolov5m_tracker.weights的控制
git add .gitattributes #添加并commit gitattributes文件
git commit -am "gitattr for big file" #需要先将 .gitattributes文件单独commit并push,
git push #push时需三次输入用户好口令.
完成.gitattributes文件的提交之后,再进行提交大文件
git add models/c3d/c3d_ucf_model-4999.caffemodel
git add yolov5m_tracker.weights
git commit -m "c3d and yolov5 tracker model files"
git push
.gitattributes 文件内容类似下面这样:
从上面这些步骤可以看出,对于超过100M的大文件,github可能是从防攻击和大文件存储策略方面考虑,实际上是要你先通过lfs track将大文件注册到一个文件.gitattributes中去,并且先将这个文件提交到github服务器上,让服务器端知道你需要上传哪些大文件,然后才能使用正常的git add/commit/push命令提交大文件到github,就好比让大文件提交前需要注册申请登记一下然后才允许上传。
#如果上面在为.gitattributes文件执行git push时还报上面的"Large files detected. You may want to try Git Large File Storage"错,应该是已经commit的大文件混在里面被同时push,这时需要先执行git reset <上一次commit的序列号> 以回退到commit大文件之前的上一次提交点,或者,先备份文件,然后执行下面这个非常危险的命令,完全删除本地的所有文件退回到初始状态,然后再track、add和commit以及push:
git reset --hard origin/master
执行git lfs ls-files查看有无已被track的文件,可以看到没有任何文件被track了。
然后重做上面的步骤(从git lfs track <大文件> 开始)提交大文件即可。
在git push 大文件时可能还会报LFS locking API 错,按照提示disable掉它即可:
文件太大,在push的过程中也可能会多次报connection refused的错:
这个错误没什么,就是再多试几次就可能一次性上传成功了。
如果因为某些原因某个目录下的文件没有提交,再次git add和commit时说没有任何更新而提交不了,可以先清理这个目录,然后再git add和commit和push:
git rm -r --cached <dir_path>
git add <dir_path>
git commit -m "..."
git push
下载多个submodule中断后继续下载,例如:
git clone --recursive https://github.com/Microsoft/onnxruntime
git submodule update --init --recursive --progress