Git 常用命令(自用笔记)

一、新建分支

  • 创建分支并切换

    $ git checkout -b index-swiper
    
  • 切换分支

    $ git checkout master
    
  • 提交代码

    $ git add *
    
    $ git commit -m "message"
    
    $ git push origin index-swiper
    

二、删除分支(远程/本地)

  • 查看所有分支(远程/本地)

    $ git branch -a
    
  • 删除本地分支

    $ git branch -D <BranchName>
    
  • 删除远程分支

    $ git push origin --delete <BranchName>
    
    $ git push origin -D <BranchName>
    

三、合并分支

  • index-swiper 分支合并到 master 分支

    $ git checkout master
    
  • 合并 index-swiper 分支

    $ git merge index-swiper 
    
  • 没有冲突直接提交远程,有冲突解决需要 add、commit、push 提交

    $ git push origin master
    

四、拉取远程分支到本地

  • 获取远程分支 remoteName 到本地新分支 localName,并跳到 localName 分支

    $ git checkout origin/remoteName -b localName
    
  • 可以把远程某各分支拉去到本地的 remoteName 下,如果没有 localName,则会在本地新建 localName

    $ git fetch origin remoteName:localName
    

五、撤销放弃本地修改

  • 未使用 git add 缓存代码
    • 放弃指定文件修改,注意中间有 --

      $ git checkout -- <filename>
      
    • 放弃所有文件修改

      $ git checkout .
      
    • 放弃指定文件修改

      $ git checkout 文件名
      

      此命令用来放弃掉所有还没有加入到缓存区(就是 git add 命令)的修改:内容修改与整个文件删除。

      此命令不会删除新建的文件,因为新建的文件还没加入 git 管理系统中,所以对 git 来说是未知,只需手动删除即可。

  • 已使用 git add 缓存代码,未使用 git commit
    • 放弃指定文件修改

      $ git reset HEAD filename
      
    • 放弃所有文件修改

      $ git reset HEAD
      

      此命令用来清除 git 对于文件修改的缓存。相当于撤销 git add 命令所在的工作。

      在使用本命令后,本地的修改并不会消失,而是回到了第一步,未使用 $ git add 缓存代码,继续使用 $ git checkout -- filename,就可以放弃本地修改。

  • 已经用 git commit 提交了代码
    • 回退到上一次 commit 的版本

      $ git reset --hard HEAD^
      
    • 也可以通过下面的 回滚代码 $ git reset$ git revert 来回退。

  • 放弃本地代码,重新从远程分支拉取代码覆盖
    $ git reset --hard origin/分支名
    

六、回滚代码(远程/本地)

  • 如果不是很会,推荐以当前分支开个新的分支来练习一下回滚,成功之后在操作正式分支,以免数据丢失!

  • 命令查看 git提交历史<commit id>

    $ git log
    
  • 回退到上一个版本

    $ git reset --hard
    
  • 回退到本地任意 commit 版本 git reset,放弃之后提交的内容。

    $ git reset --hard <commit id>
    
  • 回退本地任意 commit 版本 git revert,不会放弃之后提交的内容。

    $ git revert <commit id>
    
  • git resetgit revert 回退的区别

    • git reset 是回到指定 <commit id> 版本,在这个 <commit id> 之前的版本都会被保留,在 <commit id> 之后修改提交的版本都会被删掉,切换之后,只要没有 push,可以通过 pull 还原线上代码。

    • git revert 是通过将指定 <commit id> 进行回滚,它会将指定 <commit id> 这次修改的内容在当前分支上进行移除,并提交成为一个新的 commit,好处是之前所有版本都不会删除,只是多了一个新的 commit

      比如提交了 10 次代码了,但是其中第 5 次的提交的代码不想要了,可以通过 revert 放弃这次提交的代码,5 次后续提交的不受影响,只是单纯剔除 5 次的,然后生成一次新的 commit

  • 发布到远程,这里用到 --force 强制覆盖,不用有的情况会提示要 git pull 代码,但是拉下来又回恢复到原样了,可以看情况是否加强制覆盖,推荐加上,反正都是想提交上去,正常覆盖跟强制覆盖结果没区别。

    $ git push --force origin master
    
    $ git push -f origin master
    

    如果报错这个,是权限问题,有的分支你没有这个操作权限,可以找管理员给你发布或者给你权限
    参考文章

    dengzemiaodeMacBook-Pro:vue dengzemiao$ git push -f
    Total 0 (delta 0), reused 0 (delta 0)
    remote: GitLab: You are not allowed to force push code to a protected branch on this project.
    To gitlab.hapi123.net:lounan/vue.git
     ! [remote rejected] master -> master (pre-receive hook declined)
    error: failed to push some refs to 'git@gitlab.hapi123.net:lounan/vue.git'
    

七、将 某个分支代码 完全覆盖 另外一个分支代码

  • 例如:将 master 分支代码完全覆盖 dev 分支,在提交远程 dev

    1、首先切换到 dev 分支

    $ git checkout dev
    

    2、直接拉取 远程或本地 master 分支代码覆盖 dev 分支

    // 拉取远程 master 覆盖 dev
    $ git reset --hard origin/master
    
    // 拉取本地 master 覆盖 dev
    $ git reset --hard master
    

    3、强制推送到远程 dev

    $ git push -f origin dev
    

八、修改分支名称(远程/本地)

  • 修改本地分支名称
    $ git branch -m oldBranchName newBranchName
    
  • 修改远程分支名称

    1、先修改本地分支名称

    $ git branch -m oldBranchName newBranchName
    

    2、删除远程分支

    $ git push origin --delete oldBranchName
    

    3、提交本地修改新名称的分支

    $ git push origin newBranchName
    

九、比较文件的不同

  • 尚未缓存的改动(普通常用):

    $ git diff
    
  • 查看已缓存的改动:

    $ git diff --cached
    
  • 查看已缓存的与未缓存的所有改动:

    $ git diff HEAD
    
  • 常用的就这几项,更多的可以看看 文档

十、cherry-pick 代码回滚

  • 例如:两个人进行 AB 版本开发,在 A 版本上线的时候,B 版本不需要上线,有一个人不小心将 AB 两个版本合并了,并发布到了 master 分支,那么这个时候需要剔除出来 B 版本的内容,就可以通过 $ git cherry-pick <commit-id> 进行回滚。

    $ git cherry-pick <commit-id>
    

    如果开发 B 版本的那个人在本次开发 B 版本的时候提交了 3 次:

    $ git log
    
    commit-id3 16:00
    commit-id2 10:00
    commit-id1 8:00
    

    那么就需要从时间最近的 commit-id 开始回滚。

    例如: $ git cherry-pick commit-id3 commit-id2 commit-id1

十一、Git 可视化

  • 有时候找问题,或者查看版本文件修改,就需要用到可视化去比对,gitkgit 可视化工具,如果敲下面命令不生效,说明安装 Mac - git 安装 gitk(详细流程)

    $ gitk
    

常见的疑难杂症


  • 新建本地分支后将本地分支推送到远程库, 使用 git pull 或者 git push 的时候报错

    • 错误:

      dengzemiaodeMacBook-Pro:wx_announce dengzemiao$ git pull
      There is no tracking information for the current branch.
      Please specify which branch you want to merge with.
      See git-pull(1) for details.
      
          git pull <remote> <branch>
      
      If you wish to set tracking information for this branch you can do so with:
      
          git branch --set-upstream-to=origin/<branch> dev
      
    • 查看本地分支和远程分支的关联关系,也就是本地分支跟踪的那一支远程分支

      $ git branch -vv
      

      通过执行命令行,输出下面的数据:[origin/master] 里面的就是关联跟踪的远程分支,下面就 master 有添加关联跟踪,dev 分支后面没有 [origin/master] 也就是需要手动添加一下关联关系

      dengzemiaodeMacBook-Pro:wx_announce dengzemiao$ git branch -vv
        1.2.8      c184812 .
      * dev        2524ef2 Merge branch 'dev' of gitlab.hapi123.net:lounan/wx_announce into dev
      // 分支名称 提交日志ID [关联跟踪的远程分支]
        master     e7b6e69 [origin/master: behind 3] Merge branch 'dev'
      
    • 建立本地分支与远程分支的关联关系

      $ git branch --set-upstream-to=origin/远程分支名称 本地分支名称
      

      通过命令建立关联关系

      dengzemiaodeMacBook-Pro:wx_announce dengzemiao$ git branch --set-upstream-to=origin/dev dev
      Branch 'dev' set up to track remote branch 'dev' from 'origin'.
      

      再次查看关联关系,现在 dev 分支后面就有 [origin/dev] 了,也就是关联成功远程分支了,现在就可以在提交本地分支的时候直接使用 git pull 或者 git push 了。

      dengzemiaodeMacBook-Pro:wx_announce dengzemiao$ git branch -vv
        1.2.8      c184812 .
      * dev        2524ef2 [origin/dev] Merge branch 'dev' of gitlab.hapi123.net:lounan/wx_announce into dev
        master     e7b6e69 [origin/master: behind 3] Merge branch 'dev'
      
  • git fetch & git pull 详解

  • Updates were rejected because the tip of your current branch is behind

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡尔特斯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值