git 常用指令和操作

git 常用操作

代码仓库

创建仓库

  • 建立/初始化仓库:git init
  • 拉取远程仓库到本地:git clone

添加文件到仓库

  • 添加文件到暂存区
    • 添加单个文件:git add
    • 添加所有文件:git add .
    • 会忽略的文件:.gitignore 中指定的文件和空目录
  • 提交到本地仓库
    git commit
  • 查看工作状态
    git status
  • 对比工作区文件
    git diff

基本仓库配置

配置全局用户名和邮箱:

git config --global user.name "[name]"
git config --global user.email "[email]"

配置当前仓库用户名和邮箱:

git config user.name "[name]"
git config user.email "[email]"

代码版本/提交切换

查看过去版本/提交

git log
简介版:git log --oneline

回退版本/提交

  • 回退到当前最新提交:git reset --hard HEAD
  • 回退到上次提交:git reset --hard HEAD^
  • 回退到上 n 次提交:git reset --hard HEAD~n
  • 回退到某次提交: git reset --hard commitid

重返未来版本

  • 查看历史提交以及被回退的提交:git reflog (该记录有时效,且只在本地)
  • 回到未来版本:git reset --hard commitid

撤销修改

  • 工作区文件撤销(没有提交到暂存区/没有git add):git checkout -- fileName
  • 暂存区文件撤销:
    1. 将暂存区文件撤销到工作区:git reset HEAD filename
    2. 撤销修改:git checkout -- filename
  • 提交到了版本库:回退到之前未修改的版本

删除文件

  • 从版本库中删除文件:git rm filename
  • 从版本库中删除文件,但本地不删除该文件:git rm --cached filename

暂存修改

  • 暂存工作现场:git stash
  • 恢复工作现场:
    • 恢复:git stash apply
    • 删除:git stash drop
    • 恢复 + 删除:git stash pop

忽略文件

通过 git 仓库下的 .gitignore 文件屏蔽某些中间文件/生成文件或者其他不需要的文件

分支操作

创建与合并分支

  • 创建分支
    • 仅创建:git branch 分支名
    • 创建并切换:git checkout -b 分支名
  • 切换分支:git checkout 分支名
  • 合并分支:
    • 合并某分支到当前分支:git merge 分支名
    • 合并分支时禁用 fast forward:git merge --no-ff 分支名
  • 删除分支:
    • 删除本地分支:
      • 删除未合并分支:git branch -D 分支名
      • 删除已合并分支:git branch -d 分支名
    • 删除远程分支:
      • git push origin -d 分支名
      • or git push <远程仓库名> -d 分支名
      • 删除远程分支建议采用图形界面操作
  • 查看分支
    • 查看当前分支:git branch
    • 查看所有分支信息:git branch -a

多人协作

  • 查看远程库信息
    • 详细:git remote -v
    • 不详细:git remote
  • 更新/推送远程库:
    • 更新远程库信息:git fetch
    • 将远程库最新修改更新到本地:git pull
    • 将本地修改推送到远程库:git push or git push origin 分支名
  • 本地分支与远程分支交互:
    • 使用远程分支 A 创建本地分支:git checkout -b A origin/A
    • 将本地分支与远程分支相关联:git branch -set-upstream A origin/A

多人协作提示

建议开发遵循或参照 git 标准工作流,比如 git flow、github flow 或者 gitlab flow。

代码版本 tag

查看 tag

  • 本地 tag:git tag
  • 远程 tag:git tag -r

操作 tag

  • 添加 tag:
    • 给当前版本添加 tag:git tag 标签名
    • 给历史版本添加 tag:git tag 标签名 commitid
  • 删除 tag:
    • 删除本地标签:git tag -d 标签名
    • 删除远程标签:git push origin -d 标签名
  • 推送到远程仓库:
    • 提交某个 tag:git push origin 标签名
    • 推送所有未提交 tag:git push origin --tags
  • 更新到本地:git pull origin --tags