栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Acwing - Linux基础课(五)- git

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Acwing - Linux基础课(五)- git

acwing提供的代码托管平台:git.acwing.com(基于gitlab)

git是用一个树的结构来管理所有的历史版本。从树根节点开始,每个节点都代表代码的一个版本。每个节点都可以拓展出很多个分支。

git基本概念
  • 工作区:仓库的目录。工作区是独立于各个分支的
  • 暂存区:数据暂时存放的区域。类似于工作区写入版本库之前的缓存区,暂存区是独立于各个分支的(无论怎么切换分支,暂存区都是一个)
  • 版本库:存放所有已经提交到本地仓库的代码版本
  • 版本结构:树结构,树中每个节点代表一个代码版本
本地

若需要查看一个命令的帮助,可以加-h参数,比如

git push -h

命令

git init 将当前目录纳入git管理

git add 将某个文件的修改(新建文件,文件内容修改,删除文件)添加到暂存区

  • git add . 将当前文件夹下所有文件的修改添加到暂存区

git commit -m "message" 将暂存区里的内容提交到版本库

git restore 将某个文件在工作区的修改撤回(回滚到暂存区的内容,如果暂存区为空,则回滚到头节点的代码库)(注意只是撤回工作区的修改,假设对一个文件增加内容222,然后用git add将此修改添加到暂存区,随后又在文件中增加333,然后用git restore进行撤回,则文件会恢复到之前暂存区的状态,即222)(用git checkout 也能达到同样的效果)

  • 如果想撤回暂存区中的内容,则使用

    git restore --staged

git log 查看当前分支的所有历史版本(从初始分支走到当前分支)

  • git log --pretty=oneline 将所有历史版本显示在一行
  • git reflog:HEAD指针移动的历史路径(可以找到所有节点的编号)

git reset --hard HEAD^ 将代码库回滚到上一个版本

  • git reset --hard HEAD^^ 向上回滚两次

  • git reset --hard HEAD~100 向上回滚100次

  • git reset --hard 版本号 回滚到指定版本

远程

本地创建一个git仓库后,和远程仓库关联起来

git remote add origin git@git.acwing.com:yogurtzzz/project.git

经过git add,git commit后,推送到远程服务器

git push -u origin master

第一次push时需要加-u参数,u for upstream,随后就不用加了

将云端的某个版本库拷贝到本地

git clone git@git.acwing.com:yogurtzzz/project.git

若本地的代码和云端的有区别,可以用git pull从云端拉取最新的代码

云端的分支和本地分支是独立的。

在云端新建分支

若本地新建的分支,云端没有对应分支,则在云端创建一个

git push --set-upstream origin dev3
# 或
git push -u origin dev3

或者使用更简短的命令

git push origin dev3:dev3 # 第一个是本地分支名, 第二个是远程分支名, 通常名字取一样的

在云端删除分支

删除本地分支后,想要将删除的分支推送到云端(将云端分支也删除)

git push origin --delete dev3 # 删除云端的dev3分支

或者

git push origin -d dev3

从云端拉取分支

git checkout -b dev7 origin/dev7 # 拉取云端的dev7, 并在本地建立分支dev7进行跟踪

设置本地分支跟踪的云端分支

git branch --set-upstream-to=origin/dev7 dev7

若云端分支在本地不存在,则需要更新一下

git remote update

若云端分支上有更新的内容,如何拉取到本地呢?

git pull # 拉取当前分支
git pull origin dev5 # 也可以将其他分支拉取并合并到当前分支
分支

git branch 查看分支

git branch -a 查看全部分支(包括远程分支)

git branch -r 查看远程分支

git branch 新建一个分支

git branch -d 删除一个分支

git checkout -b 新建一个分支并切换过去

git merge 将指定的分支,合并到当前分支

如果出现了冲突,则需要进行冲突处理。

假设新拉了一个分支dev,在第9行增加了内容999,并提交到版本库;随后重新切回master分支,在第9行增加内容888,并提交到版本库。

此时执行git merge dev,则会得到冲突的结果。

git status可以看到当前是存在冲突的。并会列出冲突的文件。

在冲突的位置,内容如下(用<<<<<<<,=======,>>>>>>>分隔)

<<<<<<< HEAD
888
=======
999
>>>>>>> dev

888的部分是master修改的,999是dev分支修改的。

解决完冲突后,使用git add 和 git commit即可

其他

git stash:将工作区和暂存区中尚未提交的修改,存入栈中

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

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

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

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

git stash cclear:清除栈中的所有内容

git stash的应用场景:

1 当正在dev分支上开发某个项目,这时项目中出现一个bug,需要紧急修复,但是正在开发的内容只是完成一半,还不想提交,这时可以用git stash命令将修改的内容保存至堆栈区,然后顺利切换到hotfix分支进行bug修复,修复完成后,再次切回到dev分支,从堆栈中恢复刚刚保存的内容。
2 由于疏忽,本应该在dev分支开发的内容,却在master上进行了开发,需要重新切回到dev分支上进行开发,可以用git stash将内容保存至堆栈中,切回到dev分支后,再次恢复内容即可。
总的来说,git stash命令的作用就是将目前还不想提交的但是已经修改的内容进行保存至堆栈中,后续可以在某个分支上恢复出堆栈中的内容。这也就是说,stash中的内容不仅仅可以恢复到原先开发的分支,也可以恢复到其他任意指定的分支上。git stash作用的范围包括工作区和暂存区中的内容,也就是说没有提交的内容都会保存至堆栈中。

附:git可视化学习趣味网站:https://learngitbranching.js.org/

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/338647.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号