美文网首页
git和repo知识点记录

git和repo知识点记录

作者: 梧叶已秋声 | 来源:发表于2022-09-06 19:42 被阅读0次

    大部分的知识点都可以在Git权威指南git官方文档中找到。
    本文为工作过程中,知识点记录。

    一、 git相关
    1.分支的恢复
    【git】误删除了本地和远程开发分支,怎么找回,怎么恢复远程分支和本地分支?

    git reflog show --date=iso
    git checkout -b  要恢复的分支名  commitId
    

    2.HEAD

    http://www.worldhello.net/gotgit/02-git-solo/050-git-checkout.html#head
    HEAD可以理解为“头指针”,是当前工作区的“基础版本”,当执行提交时,HEAD指向的提交将作为新提交的父提交。看看当前HEAD的指向。

    查看git文件夹下的HEAD内容

    $ cat .git/HEAD
    ref: refs/heads/master
    

    可以看出HEAD指向了分支 master。此时执行git branch会看到当前处于master分支。

    $ git branch -v
    * master 4902dc3 does master follow this new commit?
    

    现在使用git checkout命令检出该ID的父提交,看看会怎样。

    $ git checkout 4902dc3^
    Note: checking out '4902dc3^'.
    
    You are in 'detached HEAD' state. You can look around, make experimental
    changes and commit them, and you can discard any commits you make in this
    state without impacting any branches by performing another checkout.
    
    If you want to create a new branch to retain commits you create, you may
    do so (now or later) by using -b with the checkout command again. Example:
    
      git checkout -b new_branch_name
    
    HEAD is now at e695606... which version checked in?
    您现在处于 '分离头指针' 状态。您可以检查、测试和提交,而不影响任何分支。
    通过执行另外的一个 checkout 检出指令会丢弃在此状态下的修改和提交。
    
    如果想保留在此状态下的修改和提交,使用 -b 参数调用 checkout 检出指令以
    创建新的跟踪分支。如:
    
      git checkout -b new_branch_name
    
    头指针现在指向 e695606... 提交说明为: which version checked in?
    

    什么叫做“分离头指针”状态?查看一下此时HEAD的内容就明白了。

    $ cat .git/HEAD
    e695606fc5e31b2ff9038a48a3d363f4c21a3d86
    

    原来“分离头指针”状态指的就是HEAD头指针指向了一个具体的提交ID,而不是一个引用(分支)。

    git的提交,要在分支上去做。如果HEAD不指向分支,HEAD处于“分离头指针”模式。

    $ git status
    # Not currently on any branch.
    # Changes to be committed:
    #   (use "git reset HEAD <file>..." to unstage)
    #
    #       new file:   detached-commit.txt
    #
    

    需要使用checkout 切换到分支上。

    $ git checkout master
    
    1. git push origin HEAD:refs/for/master

    git push <remote 名字> <本地分支的名字> : <远程库的名字>
    git push origin HEAD:refs/for/master
    git push 肯定是推送
    origin : 是远程的库的名字
    HEAD: 是一个特别的指针,它是一个指向你正在工作的本地分支的指针,可以把它当做本地分支的别名,git这样就可以知道你工作在哪个分支
    refs/for :意义在于我们提交代码到服务器之后是需要经过code review 之后才能进行merge的
    refs/heads 不需要

    git push origin HEAD:refs/for/master 的意思

    1. 修改某次提交
      git commit --amend
      git高级浅入之当我们需要修改某次commit信息
      Git如何修改一个过去的Commit
    1. 分支管理

    Git分支管理实践

    1. HEAD~和HEAD^

    git在回退版本时HEAD~和HEAD^的作用和区别

    1. 打补丁

    Git 打补丁-- patch 和 diff 的使用(详细)
    git apply、git am打补丁.diff 和 .patch

    1. cherry-pick 合并某个分支上的修改到另一个分支
      git cherry-pick使用

    首先要保证代码同步到最新。commit之前也是一样,代码拉到最新版本能很大程度减少冲突的产生,可先使用git stash暂存。

    首先在分支A上找到提交的commit id(例如这里是55e1c39e)。

    image.png

    然后切换到分支B上。
    使用git cherry-pick 55e1c39e。此时在分支B上就同步了分支A上的提交。

    然后 fetch ,然后再使用git push origin B到远程。

    如果cherry-pick后无法push的话先撤销cherry-pick的提交。然后再同步下代码,然后再cherry-pick,最后再push到远程。

    合并时冲突参考这个:
    git合并时冲突<<<<<<< HEAD

    GIT:cherry-pick挑拣提交

    1. git丢弃修改
      Git恢复之前版本的两种方法reset、revert(图文详解)
      在已经push的情况下修改commit message 以及撤回
      Git 丢弃本地修改
      Git丢弃修改

    2. git rebase

    【Git】rebase 用法小结

    11.master 和 origin/master
    对 Git 分支 master 和 origin/master 的一些认识

    1. 代码同步

    Git: 四種將分支與主線同步的方法

    二、repo相关

    1.Repo和Gerrit
    Repo:用Python语言开发名为repo的命令行工具用于多版本库的管理
    Gerrit:用Java开发的名为Gerrit的代码审核服务器

    4.6. Android式多版本库协同
    Repo是Google开发的用于管理Android版本库的一个工具。Repo并不是用于取代Git,是用Python对Git进行了一定的封装,简化了对多个Git版本库的管理。对于repo管理的任何一个版本库,都还是需要使用Git命令进行操作。
    repo的使用过程大致如下:
    运行repo init命令,克隆Android的一个清单库。这个清单库和前面假设的“子模组”方式工作的索引库不同,是通过XML技术建立的版本库清单。
    清单库中的 manifest.xml 文件,列出了160多个版本库的克隆方式。包括版本库的地址和工作区地址的对应关系,以及分支的对应关系。
    运行repo sync命令,开始同步,即分别克隆这160多个版本库到本地的工作区中。
    同时对160多个版本库执行切换分支操作,切换到某个分支。

    2.push到gerrit失败

    push remote rejected
    Gerrit: remote rejected HEAD->refs/for/master (change closed) 的问题

    Git push remote rejected {change ### closed}

    还有要注意是否Abandon某次提交,Abandon之后也是无法push的。

    1. 切换manifest和分支
      manifest存放代码仓。
      一般开发不在主线上,拉完代码后要注意要先切换manifest,再切分支。
      查看当前使用的manifest.
    ll .repo/
    

    查看当前repo环境存在的manifest.xml

    ll .repo/manifests
    

    切换到需要的manifest上.

    repo init -m xxx.xml
    

    然后开个本地分支,切换过去。
    repo start newbranchname --all

    repo start命令实际上是对git checkout -b命令的封装。为指定的项目或者所有项目(若使用--all参数),以清单文件中为项目设定的分支或里程碑为基础,创建特性分支。特性分支的名称由命令的第一个参数指定。相当于执行git checkout -b(创建、切换分支)。

    repo checkout
    命令实际上是对git checkout命令的封装

    repo branches
    命令读取各个项目的分支列表并汇总显示。

    1. repo命令
      4.6.7. Repo的命令集
      repo相关命令

    相关文章

      网友评论

          本文标题:git和repo知识点记录

          本文链接:https://www.haomeiwen.com/subject/tndbnrtx.html