git学习笔记

本文详细介绍了Git的基本命令,包括提交、分支管理、合并、重置、标签使用及远程仓库操作。通过实例展示了如何创建、切换和合并分支,以及如何使用交互式rebase整理提交历史。此外,还分享了本地栈式提交、提交技巧、标签管理和远程仓库的推送与拉取操作。文章旨在帮助读者深入理解并熟练掌握Git的各种操作。
摘要由CSDN通过智能技术生成

Git学习笔记

1. 命令记录

  1. git commit 用于提交记录,将修改的文件快照提交到本地仓库

    #提交记录的命令
    git commit -m "提交注释"
    
  2. git branch 用于创建和管理分支,git分支是非常轻量的,不会造成额外的存储或内存开销

    #创建分支 分支名称--newBranch 新建的分支指向最新的一次提交记录,即最新的commit
    git branch <newBranch>
    #分支切换,有多条分支的时候控制切换,git命令只会操作当前分支
    git checkout master
    #同时创建分支并切换到该分支
    git checkout -b <newBransh>
    
  3. git merge 合并分支的方式一

    #合并newBranch到当前分支,效果相当于当前分支多一次commit且该commit包含这两个分支的所有提交,但newBranch不包含当前分支的记录
    git merge <newBranch>
    
  4. git rebase 合并分支的方式二

    # 将当前分支添加到的newBranch分支的提交记录后,之后在提交一次当前分支,当前分支就包含所有的提交
    git rebase <newBranch>
    
  5. 分离HEAD

    HEAD是一个对当前检出(checkout)做记录的符号,指向当前分支的最近一次提交

    #查看HEAD指向
    cat .git/HEAD
    #HEAD指向引用的查看方式
    git sysbolic-ref HEAD
    

    而分离的HEAD就是让其指向一次具体的提交记录而不是分支名

    #C1表示一次具体的提交记录,以下代码执行之前的状态 HEAD->master->C1
    git checkout C1
    #C1在git中往往是一串hash值(基于SHA-1,共40位),查看commit hash
    git log
    
  6. 相对引用

    因为commit hash过长不方便使用,因此git支持仅提供能够唯一标识一次提交的hash前几个值就可以了,但标识每次记录确实不方便,也就需要相对引用的存在了,例如^表示向上移动一个提交,~3表示向上移动3个记录

    #HEAD向上移动3次提交
    git checkout master^^^
    git checkout master~3
    #使用-f选项使分支指向另一个提交
    git branch -f master HEAD~3
    
  7. git reset git revert撤销变更

    #撤销一次提交,但这次所做的更改还在,只是没有加入暂存区状态
    git reset HEAD^
    #reset对远程分支无效,需要使用revert,其实多push一次,提交的内容刚好取消上一次的提交,如果有^会撤销倒数第二次提交
    git revert HEAD
    
  8. git cherry-pick整理提交记录

    #将一些提交复制到当前所在的位置(HEAD)下面(处于上游的无法操作)
    git cherry-pick commit1 commit2
    
  9. 交互式rebase 适用于你不清楚自己需要的提交hash

    交互式rebase指的是使用带参数 --interactive(简称 -i)的rebase命令

    #修改当前分支4次提交内的提交顺序
    git rebase -i HEAD~4
    

2. 使用技巧

  1. 本地栈式提交

    当修改一些棘手的bug时,可能会使用一些打印之类的语句,但这些提交并不需要同步到远程服务器,因此可以使用git rebase -i和给i他cherry-pinck来只push最终解决问题的那一次提交

  2. 提交的技巧

    有时候需要修改一以前的某一次提交中的一些问题,为了实现这样的目标,需要先对多次提交进行排序,有修改需要的提交放到最近,完成修改以后再把他修改回之前的顺序。

    git rebase -i HEAD~3#将要修改的提交移动到最前面
    git commit --amend#使用amend追加修改
    git rebase -i HEAD~3#提交顺序移动回去
    git checkout master
    git rebase <changeBranch>#最后将master移动到修改的最前面
    #该方法可能引起冲突
    #方法2
    git checkout master
    git rebase <changeBranch>
    git commit --amend
    git cherry-pick <Branch1> <Branch2> ...
    
  3. git tags不同于经常变化的分支,可以永久的将某提交命名,之后像分支一样被使用,不能被检出修改提交

    #建立一个标签,表示版本号version1.0.1,如果不指定提交,则用HEAD
    git tag vsersion1.0.1 <commit1>
    
  4. git describe描述最近的tag

    #查找距离一个提交记录最近的标签,ref可以是任何能被识别成一个记录的引用,返回<tag>_<numCommits>_g<hash>,表示标签,距离多少次提交,ref所表示的提交的#hash的前几位
    git describe <ref>
    
  5. HEAD^n用来表示多个父节点时如何选择

    #选择父节点的第二个提交,不写默认第一个
    git checkout HEAD^2
    

3.远程仓库

  1. git clone复制远程仓副本到本地

    #复制远程仓库(url)的分支到本地
    #clone后自动进入HEAD分离状态,即使提交后orign/master也不会更新,只有远程仓库中相应的分支更新了才会更新
    git clone -b <yourBranch> <url>
    #git fetch类似于下载更新内容,并不会影响本地状态
    git fetch <远程主机名> <branch>
    #git pull 相当于 git fetch 和git merge 也可以使用git rebase/git cherry-pick实现类似效果
    git pull <远程主机名> <远程分支名>:<本地分支名>#等价于
    git fetch origin 
    git rebase origin/master
    
  2. git push将你的变更上传到远程服务器

    如果git push不携带任何参数,其上传行为与git的push.default配置有关,其默认值与git版本有关

    1.nothing

    不推送任何东西并有错误提示,除非明确指定分支引用规格。强制使用分支引用规格来避免可能潜在的错误。

    2.current

    推送当前分支到接收端名字相同的分支。

    3.upstream

    推送当前分支到上游,这个模式只适用于推送到与拉取数据相同的仓库,比如中央工作仓库流程模式

    4.simple

    在中央仓库工作流程模式下,拒绝推送到上游与本地分支名字不同的分支。也就是只有本地分支名和上游分支名字一致才可以推送

    #上传修改到远程,参数可以不带
    git push <branch>
    
  3. 追踪远程仓库

    #将指定的分支追踪到远程仓库的master分支 命令1
    git checkout -b <yourbranch> <origin/master>
    #命令2 如果是当前分支,可以省略<yourbranch>
    git branch -u origin/master <yourbranch>
    
  4. git push参数

    #push完整的命令 远程名 提交的分支,问题是此时的place在远程和本地同名,远程没有的话会创建,本地没有的话...(废话,命令错误)
    git push <remote> <place>
    #本地和远程分支名不同的提交
    git push origin <source>:<destination>
    
  5. git fetch参数

    参数类似于git push ,只是执行方向相反,下载与上传

    #fetch完整命令,同样的place可以是source:destination命令,但不建议这样做,因为更新远程分支到本地但origin/branch不更新容易让人迷惑
    git fetch <remote> <place>
    #source可以是空值,如果为空,push可以删除远程的destination分支,fetch会在本地新建destination分支
    
  6. git pull参数

    git pull可以看做是git fetch 和git merge的缩写,因此git pull的参数效果可以从git fetch和git merge的运行结果进行猜测

    #以下是两组git中的等效命令 之所以mergeorigin/foo是因为fetch不改变本地状态,只是下载foo新的提交,并移动了origin/foo位置到最新提交
    git pull origin foo
    git fetch origin foo;git merge origin/foo;
    #第二组
    git pull origin bar~1:bugFix
    git fetch origin bar~1;git merge bugFix
    

以上内容根据 https://oschina.gitee.io/learn-git-branching/ 和其他网页整理,其他网页网址我也没记住…

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值