git 常用操作

回退相关操作

工作区

命令 含义
git checkout -- file.txt 丢弃 file.txt 中的修改
git reset --hard 重设暂存区所有文件并且还原工作区所有修改

暂存区

命令 含义
git reset 重设暂存区所有文件
git reset HEAD 撤销最新一次的 add 状态
git reset file.txt file.txt 的放入工作区
git reset --hard 重设暂存区所有文件并且还原工作区所有修改

版本区

  • HEAD => 当前版本
  • HEAD^ => 上一个版本
  • HEAD^^ => 上上一个版本
  • HEAD~100 => 上一100个版本
命令 含义
git revert HEAD 撤销最新一次的 commit ,分支没有改动文件才能执行(存在该commit记录)
git reset <commit> 删除最新一次的 commit 并且重设暂存区所有文件 (不存在该commit版本号)
git reset HEAD~2 将当前分支倒退两个提交(高危操作)
git reset --hard HEAD^ 回退上一个版本

删除文件

命令 含义
rm file.txt 删除文件
git checkout -- file.txt 撤销删除 (未commit之前)
git clean -n 查看那些未被跟踪文件会被移除
git clean -f 移除当前目录下未被跟踪的文件
git clean -df 移除未跟踪的文件以及目录
git clean -f <path> 移除未跟踪的文件,但限制在某个路径下
git clean -xf 移除当前目录下未跟踪的文件,以及 Git 一般忽略的文件

创建与合并分支

命令 含义
git checkout -b dev 创建并且切换到dev分支
git checkout -b hotfix dev 基于dev分支创建一个hotfix分支
git checkout dev 切换到dev分支
git branch 查看所有的分支
git branch -d dev 删除dev分支(当前分支无法自行删除)
git branch -D dev 强制删除分支(用于未合并分支)
git merge dev 将dev分支合并到当前分支

远程仓库的操作

命令 含义
git remote -v 查看远程仓库的详细信息
git remote add remote-name URL 添加远程仓库
git push origin master 将内容提交到远程仓库 origin 的 master 分支上
git remote rm origin 将远程仓库 origin 删除
git remote rename origin pb 将远程仓库 origin 改为 pb
git clone URL 克隆一个远程仓库,这里的URL是远程仓库的地址
git pull origin 将远程仓库中更新的数据拉到本地
git pull origin dev 拉取远程仓库dev分支到本地
git push origin aaa 将 aaa 分支推送到远程仓库
git pull --rebase URL git rebase 代替 git merge 合并本地分支
git push --force 强制推送

git commit

命令 含义
git commit --amend 和上一次 commit 合并,并在该基础上编辑commit信息
git commit --amend --no-edit 和上一次 commit 合并, 不编辑信息
git commit -a -m "some modified" git add -A && git commit -m 'some modified'

git rebase

<base> 是可以使任何类型的提交引用(ID/分支名/标签/HEAD)

参考文档1

参考文档2

  • 什么是 git rebase(变基==改变基线)
    • 变基是将分支移到一个新的基提交的过程, 产生的是一个快速向前的合并以及完美的线性历史
    • rebase 就好像是说「我想将我的更改建立在其他人的进展之上」
    • 绝不要在公共的分支上使用它
  • git rebase <base> => git merge <base> 相似
  • git rebase --continue => 解决冲突后可执行的命令
  • git rebase --abort => 终止rebase的行动,并且所在分支会回到rebase开始前的状态。
  • git rebase -i <base> => 交互式
    • fixup
    • startq
    • squash

git reflog

Git 用引用日志这种机制来记录分支顶端的更新

  • git reflog => 显示本地仓库的引用日志
  • git reflog --relative-date => 用相对的日期显示引用日志
  • git reset --hard 0254ea7 配合使用

注: 引用日志提供的安全网只对提交到本地仓库的更改有效,而且只有移动操作会被记录

其他操作

  • git log --oneline => 简洁的显示 log 记录

报错处理

  • fatal: Unable to create 'project_path/.git/index.lock': File exists.
    • 删除该分支 => rm -f .git/index.lock
  • error: failed to push some refs to <URL>
    • 第一种解决方式:
      • 强推,即利用强覆盖方式用你本地的代码替代git仓库内的内容 => git push -f
    • 第二种解决方式:
      • 这条命令等于合并远程分支,合并完成之后同目录会出现README.md目录 => git pull --rebase origin master
  • fatal: remote origin already exists
    • 先删除远程 Git 仓库 => git remote rm origin
    • 再添加远程 Git 仓库 => git remote add origin <URL>
      • 如果执行 git remote rm origin 还报错的话
      • 我们可以手动修改 gitconfig 文件的内容 => vi .git/config
      • 把 [remote “origin”] 那一行删掉就好了。
  • error: src refspec master does not match any
    • 引起该错误的原因是,目录中没有文件,空目录是不能提交上去的
    • touch README => git add README => git commit -m 'first commit' => git push origin maste
  • git reset --hard 命令导致目录下所有文件全部被清除。
    • 首先用 git reflog 命令查找到对应的sha值,如:cd7b575
    • 通过“git reset --hard cd7b575”
      • 注意:第二步操作有时会报错, 如: fatal: Unable to create 'D:/chenjunjun/.git/index.lock': File exists.
      • 需要手动删除.git目录下的index.lock文件
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 获取与创建项目 创建仓库的途径有:在本地已有的目录,初始化一个新的;克隆复制一份别人的项目。 git init 在...
    daking阅读 6,633评论 3 48
  • 常用命令: 查看、添加、提交、删除、找回,重置修改文件 git help # 显示command的help gi...
    even_cheng阅读 297评论 0 3
  • 这段时间的忙碌,再一次印证了我的承压能力——在单位还能撑着死磕,出了大门就想泪奔。 好巧不巧地看到咪蒙的推文《职场...
    杨木子js阅读 418评论 0 4
  • 进入第二周,大家是不是开始解读报告了呢? 还记得任博老师教我们的第一句吗?——这份报告很好! 然后如何入手?和大家...
    阳菌阅读 493评论 0 1
  • 今天是艳阳天,就想起家了。家中巴掌大蓝天是让我感到最舒服的。 高三时,不管每次在学校压力多大,内...
    亮亮呀阅读 214评论 0 0