Git使用学习

Git是分布式版本控制系统,把内容按元数据的方式来存储,不会拥有一个全局的版本号,内容完整性更好

Git配置:git config用来配置或者读取相应的工作环境变量。
/etc/gitconfig文件:系统对所有用户都普遍使用的配置,–system
~/.gitconfig文件:用户目录下的配置文件只用于该用户,–global
.git/config文件:当前项目的Git目录配置文件,这里的配置仅仅针对当前项目有效。

Git工作流程: 1.克隆Git资源作为工作目录。2.在克隆的资源上添加或修改文件。3.如果其他人修改了,你可更新资源。4.在提交前查看修改。5.提交修改。6.修改完成后,如有错误,可以撤回再改。

Git的工作区,暂存区和版本库:
工作区:电脑目录
暂存区(stage||index):.get目录下的index文件。
版本库:工作区的一个隐藏目录.get。
简要流程就是,工作区修改文件时,暂存区的目录树被更新,同时工作区修改的文件被写入对象库里面的一个新对象去,这个对象的ID记录在暂存区文件索引里面。

Git创建仓库
git init 会初始化一个Git仓库。
git commit -m“?????”这样可以在提交内容的同时提交一份备注。
git clone<Git仓库><本地目录>从现有Git仓库中拷贝项目。
git config -e 编辑当前仓库的git配置文件。

Git基本操作
git init :初始化仓库
git clone:拷贝一份远程仓库,也就是下载一个项目
git add:添加文件到暂存区
git status:查看仓库当前的状态,显示有变更的文件
git diff:比较文件不同
git commit:提交暂存区到本地仓库
git reset:回退版本
git rm:将文件从暂存区和工作区中删除
git mv:移动或重命名工作区文件
git log:查看历史提交记录
git blame (file):以列表形式查看指定文件的历史修改记录
git remote:远程仓库操作
git fetch:从远程获取代码库
git pull:下载远程代码并合并
git push:上传远程代码并合并

Git分支管理
一个分支就是一条独立的开发线,使用分支就意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
git branch(分支名)(记录哈希值):创建分支命令,没有参数的时候会列出你在本地的分支。创建一个分支在这个记录位置上。
git checkout (分支名):切换分支命令,当你切换分支的时候,Git会用该分支最后提交的内容替换你的工作目录内容。
git merge:合并分支命令,可以多次合并到统一分支,也可以选择在合并之后直接删除被并入的分支。
git checkout -b (分支名):创建新分支并立即切换到该分支下,从而在该分支中操作。
git branch -d(分支名):删除分支命令。
git rebase (分支名):将该分支在被合并分支节点下创建一个副本,作为被合并分支的子类,分支指针也同时指向此副本。

Git 查看提交历史
git log:查看历史提交记录。
git log --oneline:查看历史记录的简洁版本。
git log --graph:查看历史中什么时候出现了分支、合并。
git log --reverse:逆向显示所有日志。
git log --author :查找指定用户的提交日志。ex:git log --author=Linus --oneline -5,查找Linus用户的提交日志,以简洁版本输出5行。
git blame 文件名 :查看指定文件的修改记录。

Git 标签
git tag -a v1.0,为当前项目打上一个v1.0的标签,-a选项是为“创建一个带注解的标签”,不要不打注解。标签在被删除后会重新在另外的一个位置创建同名的标签。
git describe (分支名/记录哈希值/不写默认当前位置):输出距离该位置最近的标签信息,具体距离多少此提交和该点记录。

Git分离HEAD
git checkout 哈希值:可以实现头指针(HEAD)指向一次提交记录(commit)。
git checkout main^ :^是上移标识符,带上这个符号会让头指针直接指向当前记录的父记录,也就是上一次提交。
git checkout main~x:让头指针向上移动x次。
git branch -f 分支名 HEAD~x:强制让该分支的移动到距离当前头指针位置x的父记录位置。

Git的撤销变更
git reset HEAD~x:把分支记录回退几个提交记录来实现撤销改动。用于本地。
git revert HEAD:用于远程,会在需要撤销的提交记录(C2)后面多一个新的提交,新的提交引入了更改,这些更改刚好是用来撤销C2这个提交,也就是说新的提交和C1是相同的。

Git抓取分支记录
git cherry-pick (记录哈希值):将分支上的记录复制到该分支上。
git rebase -i HEAD~x:通过窗口界面手动复制记录。
git commit --amend:将当前记录副本创建在此父记录下。

Git远程仓库操作

远程仓库的特性:远程仓库相当于是一个强大备份,本地仓库也有恢复文件到指定版本的能力,但所有的信息都是保存在本地的。有了远程仓库之后,即使丢失了本地数据,也可以通过远程仓库拿回数据。更方便更利于合作开发。

git clone:本地创建一个远程仓库的拷贝。会在咱们的本地仓库中多一个名为o/main的分支(分支名为main,远程仓库名为o,真正使用Git时远程仓库默认为origin),该类型分支就是远程分支,其拥有一些特性。远程分支反映远程仓库(在你上次和它通信时)的状态。远程分支在你检出(checkout)时自动进入分离HEAD状态,原因是让你不能直接在这些分支上进行操作。

git fetch:从远程仓库获取数据。从远程仓库下载本地仓库中缺失的提交记录并更新远程分支指针。也就是与远程仓库的通信方式。并不会改变你本地仓库的状态。
git fetch (远程仓库名,如origin) (分支名,如foo):去远程仓库的foo分支上,然后获取所有本地不存在的提交,放到本地的o/foo上。
git fetch (远程仓库名,如origin)(分支名,如foo):(分支名,如side):将仓库上foo分支的提交记录,更新到本地的side分支上。如果side分支不存在会先创建该分支再继续下面的操作。
特殊情况:当只有冒号后面半截的分支名(如foo)时,会在本地创建一个foo分支。

git pull:效果上来看他就是git fetch 和git merge两个功能的缩写。也就是从远程仓库下载记录之后合并分支。提交记录会被下载到o/main上,之后合并到本地的main分支。
git pull (远程仓库名,如origin) (分支名,如foo):相当于git fetch origin foo;git merge o/foo。
git pull (远程仓库名,如origin)(分支名,如foo):(分支名,如side):相当于git fetch origin foo:side;git merge side。

git push:将自己的变更上传到指定的远程仓库,并在远程仓库上合并自己新提交记录。把工作从main推到远程仓库中的main分支(同时会更新远程分支o/main)。需要注意的是git push不带任何参数时的行为与Git的一个名为push.default的配置有关,它的默认值取决于你正使用的Git版本。
git push (远程仓库名,如origin)(分支名,如main):大体意思就是切到本地仓库中的main分支上,获取所有的提交,然后到远程仓库origin中找到main分支,将远程仓库中没有的提交记录都加上去。这个分支名就是同步两个仓库的位置。
git push (远程仓库名,如origin)(分支名,如side)(分支名,如main):将side这个分支上的所有提交记录到远程仓库上的main分支上。
特殊情况:当只有冒号后面半截的分支名(如foo)时,通过给push传空值,这样就删除了远程仓库中的foo分支。

当出现历史偏离的提交时,也就是我们的更改记录基于的远程仓库记录与远程仓库最新的记录不一致,Git不会允许你push来变更远程仓库内容,会强制你先合并远程最新的代码再进行push操作。

git pull --rebase:效果上看就是git fetch 和git rebase的缩写

大多数情况master是被锁定了的,这个时候你就需要pull request来合并修改,如果你直接提交(commit)到本地main,然后试图推送(push)修改,就会被拒绝。解决办法就是新建一个分支,推送到远程服务器,然后reset自己的master分支和远程服务器保持一致,否则下次pull并且他人的提交和你冲突的时候就会有问题。
在操作远程分支时一般使用rebase,rebase可以使你的提交树变得更干净,所有的提交都在一条线上,只不过它修改了提交树的历史。

main 和 o/main 的关联关系就是由分支的“remote tracking”属性决定的。main 被设定为跟踪 o/main —— 这意味着为 main 分支指定了推送的目的地以及拉取后合并的目标。

git checkout -b foo o/main:创建一个名为foo的分支并切换过去,foo分支同时设置一个远程追踪o/main。
git branch -u o/main foo:设置远程追踪分支,这里foo分支会跟踪o/main。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值