Git-commands-02

2020-09-05

Git

Git 常用命令及使用情况 2

Git 常用命令

  • tag 常用于发布版本

    • 默认在 HEAD 上创建一个标签
      1
      $ git tag tag_name
    • 制定一个 commit id 创建一个标签
      1
      $ git tag tag_name commit_id
    • 创建带有说明的标签,用 -a 指定标签名,-m 指定说明文字
      1
      $ git tag -a tag_name -m "说明文字"
    • 查看所有标签 (标签都是按照字母排序的)
      1
      $ git tag
    • 查看单个标签具体信息
      1
      $ git show <tag_name>
    • 推送一个本地标签
      1
      $ git push origin <tag_name>
    • 推送全部未推送过的本地标签
      1
      $ git push origin --tags
    • 删除本地标签 (由于创建的标签只能存储在本地,不会自动推送至远程,所以错误的标签可以在本地安全的删除)
      1
      $ git tag -d tag_name
    • 删除一个远程标签 (先删除本地标签,再删除远程标签)
      1
      $ git push origin :refs/tags/<tag_name>
  • 删除文件 rm

    • 删除暂存区和工作区的文件
      1
      $ git rm filename
    • 只删除暂存区文件,不删除工作区文件 (又称为 取消追踪文件,git 不再提交此文件,远程仓库也删除此文件)
      1
      $ git rm --cached filename

版本切换 & 重设 & 撤销 详解

  • checkout : 可以撤销工作区的文件, 可以作用于 commit 或者文件

    • 恢复暂存区文件到工作区
      1
      $ git checkout <filename>
    • 恢复暂存区的所有文件到工作区
      1
      $ git checkout .
    • 回滚到最近的的一次提交,如果修改某些文件后,没有提交到暂存区,此时回滚是回到上一次提交,如果已经提交到仓库,这个回滚无效,只能回滚到提交的版本
      1
      2
      $ git checkout HEAD
      $ git checkout HEAD --filename
    • 回滚到最近一次提交的上一个版本
      1
      $ git checkout HEAD^
    • 回滚到最近一次提交的上两个版本
      1
      $ git checkout HEAD^^
    • 切换分支
      1
      $ git checkout branchname
    • 切换到某个指定的 commit 版本

      1
      $ git checkout <commit_id>
    • 切换到指定的 tag

      1
      $ git checkout <tag>
  • reset : 可以撤销工作区/暂存区的文件, 可以作用于 commit 或者文件

    • 当你用 reset 回滚到了某个版本后,那么在下一次 git 提交时,之前该版本后面的版本会被作为垃圾删掉.
    • 当我们回退到一个旧版本后,此时再用 git log 查看提交记录,会发现之前的新版本记录没有了。如果第二天,你又想恢复到新版本怎么办?找不到新版本的 commit_id 怎么办?
      • 用 git reflog 查看历史命令,这样就可以看到之前新版本的 commit_id ,然后 git reset –hard commit_id 就可以回到之前的新版本代码
    • git reset [--hard|soft|mixed|merge|keep] [<commit>或HEAD]
      将当前的分支重设(reset)到指定的 或者 HEAD (默认,如果不显示指定 ,默认是 HEAD ,即最新的一次提交),并且根据 [mode] 有可能更新索引和工作目录。mode 的取值可以是 hard、soft、mixed、merged、keep .
    • 从暂存区撤销特定文件,但不改变工作区,会取消这个文件的暂存,而不覆盖任何更改
      1
      $ git reset <filename>
    • 重置暂存区的最近一次提交,但工作区文件不变
      1
      2
      3
      $ git reset 
      <==>
      $ git reset HEAD (默认)
    • 重置工作区与暂存区,回退到最近一次提交的版本内容
      1
      $ git reset --hard
    • 重置暂存区与工作区,回退到最近一次提交的上一个版本
      1
      $ git reset --hard HEAD^
    • mixed : 将当前分支的指针指向为指定的 commit (该提交之后的提交都会被移除), 同时重置暂存区,但工作区不变
      1
      2
      3
      $ git reset <commit>
      <==>
      $ git reset --mixed <commit>
    • soft : 将当前分支的指针指向为指定的 commit (该提交之后的提交都会被移除), 但保持暂存区和工作区不变
      1
      $ git reset --soft <commit>
    • hard : 将当前分支的指针指向为指定的 commit (该提交之后的提交都会被移除), 同时重置暂存区、工作区
      1
      $ git reset --hard <commit>
  • revert : 只能作用于 commit,撤销某个已经提交的快照(和 reset 重置到某个指定版本不一样)」。它是在提交记录最后面加上一个撤销了更改的新提交,而不是从项目历史中移除这个提交,这避免了 Git 丢失项目历史

    • 生成一个撤销最近的一次提交的新提交
      1
      $ git revert HEAD
    • 生成一个撤销最近一次提交的上一次提交的新提交
      1
      $ git revert HEAD^
    • 生成一个撤销最近一次提交的上两次提交的新提交
      1
      $ git revert HEAD^^
    • 生成一个撤销最近一次提交的上 n 次提交的新提交
      1
      $ git revert HEAD~num
    • 生成一个撤销指定提交版本的新提交
      1
      $ git revert <commit_id>
    • 生成一个撤销指定提交版本的新提交,执行时不打开默认编辑器,直接使用 Git 自动生成的提交信息
      1
      $ git revert <commit_id> --no-edit

cherry-pick : 将指定的提交 commit 应用于当前分支 (可用于恢复不小心撤销 (revert/reset) 的提交)

1
2
3
$ git cherry-pick <commit_id>
$ git cherry-pick <commit_id> <commit_id>
$ git cherry-pick <commit_id>^..<commit_id>