git工作流区域

一、主要区域

  1. 工作目录
    • 作用:本地系统中的文件夹
    • 文件状态
      • 未跟踪:文件刚添加到工作目录,还没有被Git管理(还没有git add)
      • 已跟踪:Git已经对这个文件进行过管理,Git在本地仓库中有这个文件的历史记录。
        • 未修改:该文件没有再做任何修改。
        • 已修改:修改过了,但是没有使用git add来通知Git,这个文件被修改了。
        • 已删除:删除了,但是没有使用git add来通知Git,这个文件已经被删除了。
  2. 暂存区
    • 作用:存储经过git add,但是没有git commit的文件。可以认为是缓存区域。
  3. 本地仓库
    • 作用:存储所有的提交记录、分支信息、标签等数据。
    • 提交历史:每次使用git commit,Git会将暂存区内容保存到本地仓库,并为该提交创建一个唯一的提交ID。这些提交记录形成了项目的版本历史。
    • 本地分支:可以在本地仓库中创建和切换分支
  4. 远程仓库
    • 作用:远程仓库可以托管代码。
    • 同步:远程仓库允许不同的开发者之间共享代码,并且支持推送(git push)和拉取(git pull)。

二、各个区域的交互

  1. 工作区→暂存区:
    • 对文件做出修改后,可以使用git add file,将这些修改添加到暂存区。
  2. 暂存区→工作区
    • 撤销暂存区中的文件,决定不提交git restore --staged file,相当于撤销git add
  3. 工作区→本地仓库
    • 直接提交,不先放入暂存区git commit -a,把所有【已跟踪的文件】全部提交
      • 【未跟踪的文件】不会被提交
      • 【暂存区的文件】同样会被提交
  4. 本地仓库→工作区
    • 变回之前提交的状态git reset --hard 提交版本号
  5. 暂存区→本地仓库:
    • 使用git commit -m "注释"命令将暂存区中的所有文件提交到本地仓库。
  6. 本地仓库→暂存区
    • 使用git reset --soft 提交版本号
  7. 本地仓库→远程仓库
    • 想要把本地仓库的更新推送到远程仓库时,可以使用git push
  8. 远程仓库→本地仓库
    • 使用git fetchgit pull命令将远程仓库的最新更新拉取到本地仓库。前者仅更新本地的【远程跟踪分支】,而后者会拉取远程更新并尝试自动合并。

三、案例演示

  1. 新建了一个文件a.txt,此时的状态是


    • 上图,a.txt是一个新文件,此时,就是工作目录中的【未被跟踪状态】
  2. 使用git add a.txt

    此时,文件已经被放到了暂存区。

  3. 此时,我不想跟踪这个文件了,可以使用git rm --cached a.txt


    可以看见,文件又处于工作目录的【未被跟踪】状态

  4. 然后使用git add放入暂存区,同时使用git commit -m "第一次提交",放入本地仓库中。

    此时,内容全部提交了。

  5. 然后修改了a.txt的内容,再次查看状态。

    可以看见和新建文件时的状态不一样,现在的状态是工作目录中的【已跟踪】

  6. 此时,我发现修改的内容出错了,可以使用git restore a.txt恢复到上次【已提交的状态】

    可以看见,恢复成上次提交的内容了

  7. 然后正确修改了a.txt的内容,同时git add a.txt将其加入到暂存区中(这里涉及到工作目录到暂存区的转移

  8. 此时,发现a.txt的内容少了一部分,我希望补上之后,再一起提交,此时我可以先git restore --staged a.txt,从暂存区移回到工作目录。(这里涉及到暂存区到工作目录的转移)


    可以看见,又回到了工作目录了

  9. 添加完内容之后,我希望直接提交了,不希望先到暂存区。使用git commit -a -m "第二次提交"。(这里涉及到工作目录到本地仓库的转移)。git commit -a相当于先把【已被跟踪】的文件全部放入暂存区,然后再git commit。(git commit是将暂存区转移到本地仓库)

    可以看见,全部提交了。

  10. 我突然发现,最近一次提交的部分内容有问题,希望回退到暂存区,使用git reset --soft 3d35 (这里涉及到本地仓库到暂存区的转移),后面的3d35是使用git log查找上一次提交的版本号

    可以看见,已经回到了暂存区了。

  11. 提交内容,$ git commit -m "第二次正确的提交"

  12. 突然发现,最近一次提交的内容,都有问题,要全部修改了,希望回退到第一次提交的内容。使用git reset --hard 3d35(这里涉及到本地仓库到工作目录的转移)

    注意,这和10有什么区别?假设第一次提交的内容是111,然后增加了2222和3333,同时git addgit commit,此时如果是10这种情况,文件的内容就是111和2222和3333;如果是12这种情况,文件内容就只有111了。

posted @   ouyangxx  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示