Git常用命令

你好世界

关键字符

  • HEAD

    HEAD 是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。
    HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。
    
  • ^

    向上移动 1 个提交记录;
    例子:git checkout main^; git checkout HEAD^;
    
  • ~[number]

    向上移动多个提交记录,如 ~3
    git checkout main~3; git checkout HEAD~5;
    

创建仓库命令

  • git init

    初始化仓库
    
  • git clone

    拷贝一份远程仓库,也就是下载一个项目。
    

提交与修改

  • git add

    提交暂存区到仓库区
    
  • git status

    查看仓库当前的状态,显示有变更的文件。
    
  • git diff

    比较文件的不同,即暂存区和工作区的差异。
    
  • git commit

    -m [message]                      # 提交暂存区到仓库区
    [file1] [file2] ... -m [message]  # 提交暂存区的指定文件到仓库区
    
  • git rm

    删除工作区文件
    
  • git mv

    移动或重命名工作区文件。
    

基础命令

  • git branch

                                      # 列出所有本地分支
    -r                                # 列出所有远程分支
    -a                                # 列出所有本地分支和远程分支
    -f [barnch] [target-branch]       # 强制修改分支指向位置
    [branch-name]                     # 新建一个分支,但依然停留在当前分支
    [branch] [commit]                 # 新建一个分支,指向指定commit
    --track [branch] [remote-branch]  # 新建一个分支,与指定的远程分支建立追踪关系
    
  • git checkout

    -b [branch]                       # 新建一个分支,并切换到该分支
    [branch-name]                     # 切换到指定分支,并更新工作区
    -                                 # 切换到上一个分支
    -b [branch] [tag]                 # 新建一个分支,指向某个tag
    
  • git merge

    [branch]                          # 合并指定分支到当前分支
    [branch] --no-ff                  # 不使用fast-forward方式合并,保留分支的commit历史
    [branch] --squash                 # 使用squash方式合并,把多次分支commit历史压缩为一次
    
  • git rebase

    [branch]                          # 将当前所在分支工作移动到目标分支
    [branch] [target-branch]          # 将target分支,移动到指定分支,并切换到target分支
    -i [target-node]                  # 重构选中提交节点(顺序、移除、合并)详情见示例区
    

merge和rebase的区别open in new window

撤销变更

  • git reset

    [target-node]                     # 通过把分支记录回退几个提交记录来实现撤销改动
    

注:对远程分支是无效;git push -f 强行推送到远程;

  • git revert

    [target-node]                     # 创建一次新的提交,覆盖目标节点之后的提交
    

git reset和git revert都是属于重新恢复工作区以及远程提交的方式,但这两种操作有着截然不同的结果:

git reset是将之前的提交记录全部抹去,将 HEAD 指向自己重置的提交记录,对应的提交记录都不复存在;

git revert 操作是将选择的某一次提交记录 重做,若之后又有提交,提交记录还存在,只是将指定提交的代码给清除掉。

提交日志

  • git log

    查看历史提交记录
    
  • git blame

    [file]                            # 以列表形式查看指定文件的历史修改记录
    

远程操作

  • git remote

    远程仓库操作;
    
  • git fetch

    将本地仓库中的远程分支更新成了远程仓库相应分支最新的状态;
    
  • git pull

    git pull 是 git fetch 和 git merge 的缩写
    
  • git push

    提交 本地库记录 到远程仓库,并同步更新本地远程库;
    

其它命令

  • git cherry-pick

    [hash] [hash] ...                 # 将选择的commit,按顺序合并进当前分支 
    
  • git tag

    [tag-name] [hash]                 # 将选择的commit,打上指定标签
    

注:起“锚点”作用;

  • git describe

                                      # 检出当前位置,离得最近锚点标签
    [ref]                             # 检出指定位置,离得最近锚点标签
    
  • git stash

                                      # 会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录
    pop                               # 恢复之前缓存的工作目录
    list                              # 查看现有stash
    drop [stash-name]                 # 移除stash
    clear                             # 删除所有缓存的stash
    

示例区

git rebase

# -i [target-node] 示例:

# 更改提交顺序
pick 8b485bb 4
pick a75ed74 5
# 更改为
pick 8b485bb 5
pick a75ed74 4

# 删除一个提交 
pick 060046b 4
pick 78cd80c 5
# 更改为
pick 8b485bb 5

# record 修改提交消息(提交内容不变)
pick 8b182fa 2
pick b21c896 3
pick 6d5e9c8 5
# 更改为
r 8b182fa 2
pick b21c896 3
pick 6d5e9c8 5
# 保存后,进入编辑 2 提交vim窗口。编辑后保存成功

# edit修改提交(想要在两个提交之间 再加提交)
pick b21c896 3
pick 6d5e9c8 5
# 更改为
e b21c896 3
pick 6d5e9c8 5
# 保存后,进入 编辑变基模式 (编辑节点后提交会被移除)
# 提交期望插入 内容提交
# 最后执行 git rebase --continue 恢复正常状态 同时恢复之前移除节点;

# edit修改提交(单纯的修改这次提交内容和消息)
pick b21c896 3
pick 6d5e9c8 5
# 更改为
e b21c896 3
pick 6d5e9c8 5
# 保存后,进入 编辑变基模式 (编辑节点后提交会被移除)
# 更新 内容 ,使用 git commit --amend 提交
# 执行 git commit --continue 恢复正常状态 同时恢复之前移除节点;

# squash合并提交
pick 79baa21 444 测试不增加提交次数 更新提交记录及内容444
pick 616d8f4 5
# 更改为
pick 79baa21 444 测试不增加提交次数 更新提交记录及内容444
s 616d8f4 5
# 保存后,进入 重新编辑提交命名vim窗口。编辑后保存成功

# fixup合并提交,只保留较早的提交信息
pick 79baa21 444 测试不增加提交次数 更新提交记录及内容444
pick 616d8f4 5
# 更改为
pick 79baa21 444 测试不增加提交次数 更新提交记录及内容444
f 616d8f4 5
# 保存成功 得到 commit 名为 444 测试不增加提交次数 更新提交记录及内容444 合并后记录

# exec 略
# drop 略
最后更新时间:
贡献者: DESKTOP-ER5718D\zt, LAPTOP-CRCIOU48\hjl