ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

git中关于工作区,暂存区,本地仓库,远程仓库的一些问题

2022-01-04 13:02:14  阅读:336  来源: 互联网

标签:origin git 仓库 暂存区 master branch commit 上传


原理


参考阮一峰的博客:常用 Git 命令清单
在这里插入图片描述

  • workspace: 直接写好的代码,以文件形式存在硬盘上的,其实就是保存在workspace工作区;
  • index/stage: git add之后会存入stage/index暂存区
  • repository: git commit之后会存入repository本地仓库;
  • remote: git push 之后会存入remote远程仓库.

如果还是不太明白,可以继续参考:


在这里插入图片描述

在这里插入图片描述



1. gitignore并从远程git中删除要忽略的目录

参考:idea创建.gitignore并从远程git中删除要忽略的目录(如.idea)

问题描述:

  • remote的git中内容:
    在这里插入图片描述
  • .gitignore中的内容:
    d2l_zh_jupyter/self_exercise/.ipynb_checkpoints/
    
  • 本地git仓库的内容:
    在这里插入图片描述

可以看到,

  • 虽然我的.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端的文件夹也会消失


2. 上传超过100MB的文件报错

在这里插入图片描述
参考:处理GitHub不允许上传大于100M文件问题

github上传文件时,超过50M会警告,超过100M直接拒绝

如果依然想要上传这个大文件,可以参考:git large file storage,这是git官方为了大文件专门另外搞得一个工具


3. Your branch is ahead of ‘origin/master’ by N commits

参考: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: 直接写好的代码,以文件形式存在硬盘上的,其实就是保存在workspace工作区;
  • index/stage: git add之后会存入stage/index暂存区
  • repository: git commit之后会存入repository本地仓库;
  • remote: git push 之后会存入remote远程仓库.

简单来说,出现这个提示信息是因为你对本地的master(仓库)做了一些改变,但是没有把它传到远端。根据自己远端和本地仓库的情况选择不同的处理方式:

  1. 在一个良好的工作流中,远端仓库的master副本应该是完好的,本地存放的master应该只是远端的一个副本(远端和本地仓库内容应该一样。。。),在这种工作流中不会出现这种提示。
  2. 如果是另一种工作流,本地发生了改变,那就直接git push origin(假设origin是你的远端)
  3. 如果本地的改变是错误的,那就移除,同时重置本地的master到和远程一致的状态,使用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 logcommit 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过来。重新上传。

标签:origin,git,仓库,暂存区,master,branch,commit,上传
来源: https://blog.csdn.net/Castlehe/article/details/122274714

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有