Git

git常用操作

git常用操作

Posted by HuberyYang on December 2, 2019

分支

  • 切换分支 git checkout <branch_name>

  • 创建分支 git checkout -b <branch_name>

  • 合并分支
    • 完全合并

        // 分支 A、B, B 合入 A
        git checkout A
        git merge B
        git push origin A
      
    • 合并指定的 commit 及之前的 commit

        // 分支 A、B, B 的 commit cb4023 及之前的 commit 合入 A
        git checkout A
        git rebase --onto cb4023
        git push origin A
      
    • 合并指定的 commit

        // 分支 A、B, B 的 commit cb4023 合入 A
        git checkout A
        git cherry-pick cb4023
        git push origin A
      
  • 删除分支

    • 删除已被终止的分支 git branch -d <branch_name>

    • 删除本地分支 git branch -D <branch_name>

    • 删除远程分支 git push origin -d <branch_name>

  • 恢复被删除的分支 git branch <branch_name> <hash_val>

      查找分支 hash_val 使用 git reflog
      eg: git branch <branch_name> HEAD@{4}
    

代码回滚

  • 本地代码库回滚

    • git reset --hard commit-id –> 回滚到commit-id,将commit-id之后提交的commit都去除
    • git reset --hard HEAD~3 –> 将最近3次的提交回滚
  • 远程代码库回滚

    • 应用场景:自动部署系统发布后发现问题,需要回滚到某一个commit,再重新发布

    • 原理:先将本地分支退回到某个commit,删除远程分支,再重新push本地分支

    • 操作步骤:

      1、git checkout the_branch

      2、git pull

      3、git branch the_branch_backup //备份一下这个分支当前的情况

      4、git reset --hard the_commit_id //把the_branch本地回滚到the_commit_id

      5、git push origin :the_branch // 删除远程 the_branch

      6、git push origin the_branch //用回滚后的本地分支重新建立远程分支

      7、git push origin :the_branch_backup //如果前面都成功了,删除这个备份分支

    注意:如果使用了gerrit做远程代码中心库和code review平台,需要确保操作git的用户具备分支的push权限,并且选择了 Force Push选项(在push权限设置里有这个选项)

    另外,gerrit中心库是个bare库,将HEAD默认指向了master,因此master分支是不能进行删除操作的,最好不要选择删除master分支的策略,换用其他分支。如果一定要这样做,可以考虑到gerrit服务器上修改HEAD指针。。。不建议这样搞

版本tag

  • 给指定的某个commit号加tag

    git tag -a v1.2 9fceb02 -m "my tag"

  • 将tag同步到远程服务器

    git push origin v1.0

  • 删除某个tag

    • 本地删除 git tag -d v0.1.2
    • 远端删除 git tag push origin :refs/tags/<tagName>

更改本地和远程分支的名称

  • Rename branch locally

    git branch -m old_branch new_branch

  • Delete the old branch

    git push origin :old_branch

  • Push the new branch, set local branch to track the new remote

    git push --set-upstream origin new_branch

查看分支创建时间

  • 查看到指定分支的历次更改记录,最下面一条的时间即是分支创建时间

    git reflog show --date=iso <branch name>