Git常用命令

本文总结了常见的git使用命令,以及对日常开发过程中常用的操作进行了描述.

0x01. 网上翻出的命令分类

  • 创建版本库
1
2
$ git clone <url>                  #克隆远程版本库
$ git init #初始化本地版本库
  • 修改和提交
1
2
3
4
5
6
7
8
9
$ git status                       #查看状态
$ git diff #查看变更内容
$ git add . #跟踪所有改动过的文件
$ git add <file> #跟踪指定的文件
$ git mv <old><new> #文件改名
$ git rm<file> #删除文件
$ git rm --cached<file> #停止跟踪文件但不删除
$ git commit -m "commit messages" #提交所有更新过的文件
$ git commit --amend #修改最后一次改动
  • 查看历史提交
1
2
3
$ git log                    #查看提交历史
$ git log -p <file> #查看指定文件的提交历史
$ git blame <file> #以列表方式查看指定文件的提交历史
  • 撤销
1
2
3
4
$ git reset --hard HEAD      #撤销工作目录中所有未提交文件的修改内容
$ git checkout HEAD <file> #撤销指定的未提交文件的修改内容
$ git revert <commit> #撤销指定的提交
$ git log --before="1 days" #退回到之前1天的版本
  • 分支与标签
1
2
3
4
5
6
7
8
$ git checkout -b <branchName> origin/<branchName>  #拉取并切换到指定的分支
$ git branch #显示所有本地分支
$ git checkout <branch/tag> #切换到指定分支和标签
$ git branch <new-branch> #创建新分支
$ git branch -d <branch> #删除本地分支
$ git tag #列出所有本地标签
$ git tag <tagname> #基于最新提交创建标签
$ git tag -d <tagname> #删除标签
  • 合并与衍合
1
2
$ git merge <branch>        #合并指定分支到当前分支
$ git rebase <branch> #衍合指定分支到当前分支
  • 远程操作
1
2
3
4
5
6
7
8
9
10
11
12
$ git remote -v                   #查看远程版本库信息
$ git remote show <remote> #查看指定远程版本库信息
$ git remote add <remote> <url> #添加远程版本库
$ git fetch <remote> #从远程库获取代码
$ git pull <remote> <branch> #下载代码及快速合并
$ git push <remote> <branch> #上传代码及快速合并
$ git push <remote> :<branch/tag-name> #删除远程分支或标签
$ git push --tags #上传所有标签

$ git fetch origin 远程分支:本地分支 # 创建远程分支,但是不切换

$ git pull origin <remoteBranchName> # 拉取远端分支内容到本地当前分支
  • 其他操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ git cherry-pick [<options>] <commit-ish>
# 常用options:
# 退出当前的chery-pick序列
--quit
# 继续当前的chery-pick序列
--continue
# 取消当前的chery-pick序列,恢复当前分支
--abort
# 不自动提交
-n, --no-commit
# 编辑提交信息
-e, --edit

# cherry-pick 指定 commit,可同时传入多个 commit
$ git cherry-pick <commit_hash>
# 放弃 cherry-pick
$ git cherry-pick --abort
# cherry-pick 多个 commit 时,解决冲突后继续下次合并
$ git cherry-pick --continue

cherry-pick 的多次提交

1
2
3
4
# 区间是在(], 即不包含commitID1
$ git cherry-pick cmmitID1..cmmitID2
# 区间是在(]
$ git cherry-pick cmmitID1^..cmmitID2

0x02. 开发中的常用命令

  • 提交推送
1
2
3
4
5
6
# 添加暂存文件
$ git add index.html
# 添加提交及提交信息
$ git commit -m "修改/新增内容注解"
# 推送至远程
$ git push

0x03. 储存工作区

概念: 当你想使现在当工作区保持在未修改前的状态时可以使用暂存功能,贮藏会把所有未提交的修改(包括暂存的和非暂存的)都保存起来.

应用场景:

当你想推送代码时,发现分支已有别人提交当代码(处于分支落后时),可以先暂存代码然后再拉去最新当代码,代码拉取完成并且没有冲突时可以将贮藏区保存的内容应用到当前工作区

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 存储工作区
$ git stash
# 存储工作区并添加备注内容
$ git stash save 'development'
# 查看已贮藏区列表
$ git stash list
# 应用最新贮藏的内容(应用后不删除该贮藏)
$ git stash apply
# 应用最新贮藏的内容(应用后该贮藏的内容会被删除!)
$ git stash pop
# 删除最新贮藏的内容
$ git stash drop
# 清除所有的缓存
$ git stash clear

注意: 以下命令都可以指定操作任意一个已贮藏的内容,只需要在后面跟入stash@{1}索引,输入git stash list 查看索引

0x04.回撤版本

应用场景:

当不小心将错误当代码推送到远程仓库想要回撤并且不留下版本记录时

GUI操作:

选中要回撤到到版本,点击重置到这次提交,此时本地版本将会重置到该版本,并且落后于远程分支

最后使用命令行强制推送git push --force origin master,将本地代码强制覆盖到远程仓库

命令行:

1
2
3
4
# 将版本重置到634b64d版本,或者 git reset --soft HEAD^ 将版本重置到上一个版本,git reset --hard 634b64d 命令则不会保存之前提交到内容
$ git reset --soft 634b64d
# 强制覆盖远程仓库
$ git push --force origin master

0x05.回滚版本

应用场景:

  • 撤销指定文件到指定版本
1
2
3
4
# 查看指定文件的历史版本
git log <filename>
# 回滚到指定commitID
git checkout <commitID> <filename>
  • 回滚最后一次提交
1
2
3
4
# 当前Head指针指向当前分支的最新节点
$ git revert HEAD
# 推送到远端
$ git push origin <branch>
  • 回滚到某次的提交
1
2
3
4
# 找到要回滚的commitID
$ git log
# 回滚
git revert commitID

0x06.打标签

标签的作用, 可以用来标记版本信息, 标记特殊的提交记录等. 下面是关于标签的常用命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看已有的标签
$ git tag
****操作本地仓库标签******
# 为最新的提交记录创建名为'v1.0.0'的标签
$ git tag v1.0.0
# 为版本号1452113的提交记录创建名为'v1.0.0'的标签
$ git tag v1.0.0 1452113
# 删除本地仓库名为'v1.0.0'的标签
git tag -d v1.0.0
****操作远程仓库标签******
# 将名为'v1.0.0'的标签推送到远程仓库
git push origin v1.0.0
# 删除远程仓库里名为'v1.0.0'的标签
git push origin :refs/tags/v1.0.0

0x07.新分支

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 查看分支
$ git branch
# 在当前分支基础上,以最新版本创建名为'dev'的分支
$ git branch dev
# 'd519940'版本记录,创建名为'dev'的分支
$ git branch dev d519940
# 切换到'dev'分支
$ git checkout dev
# 创建并切换到'dev'分支
$ git checkout -b dev
# 删除'dev'分支(删除分支时不能处于所要被删除的分支上)
$ git branch -d dev
# 强制删除'dev'分支(分支还没有被合并时需要强行删除,强行删除后将丢失已修改的内容)
$ git branch -D dev
******操作远程仓库********
# 将本地分支'dev'推送到远程仓库命名为'dev',(本地分支名:远程分支名)
$ git push origin dev:dev
# 删除远程'dev'分支
$ git push --delete origin dev

0x08.合并分支

1
2
3
4
# 切换至master分支
$ git checkout master
# 合并de分支至master分支
$ git merge de

0x09.查看修改记录

1
2
3
4
5
6
# 查看'index.html'文件所有的提交信息记录
$ git log index.html
# 查看'index.html'文件所有的提交修改内容
$ git log -p index.html
# 查看最近三次提交
$ git log --oneline -3

0x0A. git远程仓库的迁移

  • 在代码托管服上创建一个空项目, 假装仓库地址是:
    1
    git@xxx.xxx.xx.xx:<groupName>/<projectName>.git
  • 将远程仓库克隆一份到本地
    1
    $ git clone <git/http>xxx.git 
  • 在Gitlab或者其他托管平台删除远程仓库(保不保留按照实际情况走就行了)
  • 删除本地仓库的远端
    1
    $ git remote rm origin
  • 将本地仓库关联到最新的远端地址
    1
    git remote add origin git@xxx.xxx.xx.xx:<groupName>/<projectName>.git
  • 将本地记录推送到远端
    1
    $ git push -u origin master

(完)