AcWing Linux基础课第五节git笔记

12 篇文章 0 订阅

1、该系列为ACWing中Linux基础课,已购买正版,课程作者为yxc
2、y总培训真的是业界良心,大家有时间可以报一下
3、为啥写在这儿,问就是oneNote的内存不够了QAQ

git

git用树结构管理所有的历史版本;
每一个节点代表代码的版本,也可以扩展很多分支,或实现不同分支的合并和回滚;

1、git基本概念

  • 工作区:仓库的目录。工作区是独立于各个分支的(不管在哪个分支里面,工作区都是同一个)。(本地看git就是一个文件夹,当前的工作目录)

  • 暂存区:数据暂时存放的区域,类似于工作区写入版本库前的缓存区。暂存区是独立于各个分支的。(暂存区是工作区和版本库的桥梁,每次先从工作区存一点在暂存区,再整体存入版本库)

  • 版本库:存放所有已经提交到本地仓库的代码版本(将所有版本用一棵树存下来)。

  • 版本结构:树结构,树中每个节点代表一个代码版本。

  • 头指针Head:每次head只会处于其中一个节点;当要将当前工作区存入版本库时,会在head后创建一个新的节点,同时将head后移一位。

  • 主分支:默认创建的是master分支;origin是添加的云端分支,通过git remote add origin与本地完全一致;

acs@61f2b97ca5ed:~/project$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
表示当前分支比云端分支多1个版本
  • 分支:任意一个节点都可以有分支,在commit前只是有一个分支的趋向。

2、 git常用命令

  • git config --global user.name xxx:设置全局用户名,信息记录在~/.gitconfig文件中;

  • git config --global user.email xxx@xxx.com:设置全局邮箱地址,信息记录在~/.gitconfig文件中

  • git init:将当前目录配置成git仓库,信息记录在隐藏的.git文件夹中

  • git add XX:将XX文件的修改添加到暂存区;只暂存main.cpp可以将B文件(main.cpp)作为A文件(readme.txt)的下一个节点。删文件这个操作也可以加入暂存区,同样用git add X命令

    • git add .:将所有待加入暂存区的文件加入暂存区;
  • git rm --cached XX:将文件从仓库索引目录中删掉(不去管理该文件);

  • git restore --stage XX 将暂存区的文件(暂存区的修改)从暂存区撤出,但不会更改文件;(git rm --cached XX功能相似,只是从暂存区里拿出来,清除的是暂存区)

  • git restore XXgit checkout — XX:将XX文件尚未加入暂存区的修改全部撤销(将上一步对代码的修改取消并回滚到暂存区里暂存的版本,删除的工作区,如果暂存区没有内容,则回滚到Head节点指向的版本)

    rm a.txt
    git restore a.txt
    

区别:
git restore --staged 将文件从暂存区撤出,但不会撤销工作区文件的更改(可以比较出当前文件和暂存区文件的不同)
git resore 利用暂存区的版本来撤销当前工作区的操作

acs@61f2b97ca5ed:~/project$ git status
On branch master
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:   readme.txt
可以使用"git restore"将修改全部撤回
  • git commit -m "给自己看的备注信息"将暂存区的内容提交到当前分支(版本库)

  • git status:查看仓库状态

    acs@61f2b97ca5ed:~/project$ git status
    On branch master
    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:   readme.txt
    
    no changes added to commit (use "git add" and/or "git commit -a")
    acs@61f2b97ca5ed:~/project$ git add readme.txt 
    acs@61f2b97ca5ed:~/project$ git status
    On branch master
    Changes to be committed:
      (use "git restore --staged <file>..." to unstage)
            modified:   readme.txt
    
  • git diff XX:查看XX文件相对于暂存区修改了哪些内容(当工作区有改动,临时区为空,diff的对比是“工作区与最后一次commit提交的仓库的共同文件”;当工作区有改动,临时区不为空,diff对比的是“工作区与暂存区的共同文件”)

  • git log:查看当前分支的所有版本;git log --pretty=oneline用一行显示信息(从起点到head的路径);

    acs@61f2b97ca5ed:~/project$ git log --pretty=oneline
    22ef31268e7f4d432a0cb33dad7f54f7b967b4d5 (HEAD -> master) 3333th
    25f34b0c15feb5a4416fdf7367b43a65a7e47762 add readme.txt the 2th
    e510b7b536e1a67fe2927c5a78e95cccf00b8b2b add readme.txt
    
  • git reflog:查看HEAD指针的移动历史(包括被回滚的版本)(head所有的移动历史记录)(按q退出)

    从下往上看,最开始在add readme.txt;
    第二在 add 222;
    第三在 add 333;
    最后回到 HEAD^^;
    每一个版本编号是哈希值的前7位;
    =====================================
    acs@61f2b97ca5ed:~/project$ git reflog
    e510b7b (HEAD -> master) HEAD@{0}: reset: moving to HEAD^^
    22ef312 HEAD@{1}: commit: 3333th
    25f34b0 HEAD@{2}: commit: add readme.txt the 2th
    e510b7b (HEAD -> master) HEAD@{3}: commit (initial): add readme.txt
    
  • git reset --hard HEAD^git reset --hard HEAD~:将代码库回滚到上一个版本(回滚是不会删掉代码的)

    • git reset --hard HEAD^^:往上回滚两次,以此类推
    • git reset --hard HEAD~100:往上回滚100个版本
    • git reset --hard 版本号:回滚到某一特定版本
  • rm project -rf删除本地项目;

分支

  • git checkout -b branch_name:创建并切换到branch_name这个分支;当前新分支的内容与head节点表示的内容相同;暂存区和分支没有任何的关系,master 和dev分支共用一个暂存区。commit时处于哪个分支就加在哪个分支后面

  • git branch:查看所有分支和当前所处分支

    acs@61f2b97ca5ed:~/project$ git branch
    * dev (*表示当前所在的分支)
      master
    
  • git checkout branch_name:切换到branch_name这个分支

    acs@61f2b97ca5ed:~/project$ git checkout master
    Switched to branch 'master'
    Your branch is up to date with 'origin/master'.
    acs@61f2b97ca5ed:~/project$ git branch             
      dev
    * master
    
  • git merge branch_name:将分支branch_name最新的节点合并到当前分支的当前节点上; 使用的Fast-forward是快速合并模式,该模式没有产生复制,而是将master上head节点直接指向dev分支的节点;

acs@61f2b97ca5ed:~/project$ git merge dev
Updating b606141..0108d73
Fast-forward
 readme.txt | 1 +
 1 file changed, 1 insertion(+)

  • git merge branch_name -noff:将dev分支复制到master分支上;

  • 合并冲突:新分支的数据是(777 888),master分支的数据是(777 999),自动合并会失败,git status显示both modified

    <<<<<<<<<<HEAD
    当前分支里的内容
    ==============
    dev2分支的内容
    >>>>>>>>>>>
    
  • git branch -d branch_name:删除本地仓库的 branch_name分支

  • git branch branch_name:创建新分支

  • 栈:存储所有历史没有持久化的修改(例如断电的时候);只与本地有关;

  • git stash:将工作区和暂存区中尚未提交的修改存入栈中,存入后工作区和暂存区就没东西了;

  • git stash apply:将栈顶存储的修改恢复到当前分支,但不删除栈顶元素

  • git stash drop:删除栈顶存储的修改

  • git stash pop:将栈顶存储的修改恢复到当前分支,同时删除栈顶元素

  • git stash list:查看栈中所有元素

  • git remote add origin git@git.acwing.com:zxy_12138/project.git:将本地仓库关联(上传)到远程仓库(映射至git.acwing.com服务器中zxy_12138/project文件夹);

  • git init --initial-branch=main:推送现有文件夹,本地是master应改为master;

  • 删除现有的origin分支:git remote remove origin(git remove add出错时使用);

  • git push -u (第一次需要-u以后不需要):将当前分支推送到远程仓库

    • git push origin branch_name:将本地的分支推送到远程仓库(非master不能用git push直接推因为对应不到相应的分支)
    • git push --set-upstream origin branch_name:设置本地的branch_name分支对应远程仓库的branch_name分支(在云端创建了该分支)
    • git push -u origin main:本地改为master;省略origin,main则为推送当前分支;
    • git push -d origin branch_name:删除远程仓库的branch_name分支
  • git clone git@git.acwing.com:xxx/XXX.git:将远程仓库XXX下载到当前目录下(下载后虽然版本都在,但head节点记录为空)

  • git pull:将远程仓库的当前分支与本地仓库的当前分支的当前节点合并(下载+merge)

    • git pull origin branch_name:将远程仓库的branch_name分支与本地仓库的当前分支(的当前节点)合并
    git pull origin dev5
    本地master合并云端dev5
    
  • git branch --set-upstream-to=origin/branch_name1 branch_name2:将远程的branch_name1分支与本地的branch_name2分支对应(绑定);本地要先创建branch_name2分支;将云端的某个分支合并到本地的某个分支;

  • git checkout -t origin/branch_name 将远程的branch_name分支拉取到本地

    git checkout -t origin/dev
    合并dev分支
    
  • 多人合作开发dev分支的模式:1、先clone云端master分支;2、checkout创建本地dev分支;3、git branch --set-upstream-to=origin/dev dev;4、git pull下载云端分支;5、第一个人写(aaa hhh),第二个人写(aaa iii)两人同时push第二个人会报错;,第二个人要先git pull并解决冲突,将解决的版本持久化并提交到云端。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值