赞
踩
参考阮一峰的博客:常用 Git 命令清单
workspace工作区
;stage/index暂存区
;repository本地仓库
;remote远程仓库
.如果还是不太明白,可以继续参考:
参考:idea创建.gitignore并从远程git中删除要忽略的目录(如.idea)
问题描述:
d2l_zh_jupyter/self_exercise/.ipynb_checkpoints/
可以看到,
.gitignore
文件中包含了这个文件夹,但是remote的git仓库还是有这个文件夹,没有删除。但是其文件内容确实和本地不同。.gitignore
文件,所以有些问题。# 停止追踪指定文件,但该文件会保留在工作区(如果是文件夹,需要迭代移除,需要加上参数-r)
git rm --cached -r d2l_zh_jupyter/self_exercise/.ipynb_checkpoints/
git add .gitignore
git commit -m "gitignore提交删除ipynb_checkpoints"
git push origin master
执行以上操作,虽然workspace工作区中文件仍然存在,但是不会追踪(忽略),则上传之后,remote端的文件夹也会消失
github上传文件时,超过50M会警告,超过100M直接拒绝
如果依然想要上传这个大文件,可以参考:git large file storage,这是git官方为了大文件专门另外搞得一个工具
参考:git large file storage,由于存在那个大文件,所以需要从上次commit中删除那个大文件,才可以继续执行push
# 先把那个不合规的文件 从暂存区里删除
git rm --cached /Users/Dora/Desktop/XXX/XXX/my.txt
# 执行完这步后,这个大文件将会从你的commit记录里移除,然后就可以git push把本地代码push到github上了
git commit --amend -CHEAD
BUT。。。由于我在上传的过程中因为没有按照正常方式操作,所以显示了有两个没有完成的commits
,可以使用git status和git log来查看上传的分支情况等
$ git status
On branch main
Your branch is ahead of 'origin/main' by 2 commits.
(use "git push" to publish your local commits)
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .gitignore
Untracked files:
(use "git add <file>..." to include in what will be committed)
"4. \351\253\230\347\255\211\346\225\260\345\255\246 \347\254\2547\347\211\210 \344\270\213\345\206\214 \345\220\214\346\265\216\345\244\247\345\255\246.pdf"
no changes added to commit (use "git add" and/or "git commit -a")
参考:
结合这部分图理解。
workspace工作区
;stage/index暂存区
;repository本地仓库
;remote远程仓库
.简单来说,出现这个提示信息是因为你对本地的master(仓库)做了一些改变,但是没有把它传到远端。根据自己远端和本地仓库的情况选择不同的处理方式:
git push origin
(假设origin是你的远端)git reset --hard origin/master
以我的repo为例,在本地git仓库中运行:
$ git log commit e7dad275beef801b602655f60fba68451ae03f05 (HEAD -> main) Author: huangs <XXX@XXXX.com> Date: Sun Jan 2 11:10:15 2022 +0800 首次上传 commit 88e010f7784bdce51e049de44ee34a60db306794 Author: huangs <XXX@XXX.com> Date: Sun Jan 2 00:23:41 2022 +0800 首次上传 # 这个是从github上clone的时候带的。(是github上创建项目的时候,因为加入了README和.gitignore文件所以填写的) commit 247a7060f4f2a0b209d2deba07411b36adf5035e (origin/main, origin/HEAD) Author: CastleDream <35064479+CastleDream@users.noreply.github.com> Date: Sat Jan 1 16:05:03 2022 +0800 Initial commit $ git branch -v * main e7dad27 [ahead 2] 首次上传
可以看到,原始的远端的内容其实是:origin/HEAD
,所以我使用的命令应该是
!!!!!!!
注意,执行这个命令之后,在这个节点之后改变的内容都会消失!(就像系统镜像一样)
$ git reset --hard origin/HEAD
HEAD is now at 247a706 Initial commit
如果发现自己需要的文件没有备份,可以恢复到最新的一次commit的内容
下面的e7dad27
来自git log
的commit e7dad275beef801b602655f60fba68451ae03f05
(一般前7位数就可以了)
$ git reset --hard e7dad27
Updating files: 100% (17/17), done.
HEAD is now at e7dad27 首次上传
然后就会恢复了。参考:撤销 git reset --hard HEAD~1
但是目前看到,似乎如果不希望git status
中再出现这个Your branch is ahead of 'origin/master' by 3 commits
,好像只能reset到原始状态
$ git reset --hard origin/HEAD
HEAD is now at 247a706 Initial commit
$ git status
On branch main
Your branch is up to date with 'origin/main'.
所以只能先自己备份修改过的东西,然后重置,确认status没问题之后,再把备份中的内容copy过来。重新上传。
# 删除工作区文件,并且将这次删除放入暂存区
$ git rm [file1] [file2] ...
# 停止追踪指定文件,但该文件会保留在工作区,对暂存区没有影响
$ git rm --cached [file]
commit
出错,比如因为commit
的内容包含一个大文件,报错。git rm --cached
停止追踪那个文件之后,由于该文件还存在于上次的commit暂存区中git commit --amend
来覆盖上次的commit
TBD
参考:
如下,使用git commit -am
代替git commit -m
huangshan@DESKTOP-AO4TL3C MINGW64 /c/1.learning/动手学深度学习 (master) $ git commit -m "更新gitignore" On branch master Your branch is up to date with 'origin/master'. Changes not staged for commit: (use "git add/rm <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: .gitignore deleted: 01.lab_your_first_ai_project_F.ipynb no changes added to commit (use "git add" and/or "git commit -a") huangshan@DESKTOP-AO4TL3C MINGW64 /c/1.learning/动手学深度学习 (master) $ git commit -am "更新gitignore" [master afe3ac3] 更新gitignore 2 files changed, 2 insertions(+), 2858 deletions(-) delete mode 100644 01.lab_your_first_ai_project_F.ipynb
TBD
参考:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。