git的常用操作

github用法

1 分支操作

> git branch  # 查看本地分支
> git branch -r  # 查看远程分支
> git branch -a  # 查看当前分支和分支列表
> git branch name  # 创建新的分支name
> git checkout name  # 切换到分支name
> git checkout -b name  # 复制当前分支,创建为新分支name,并切换到新分支name
        相当于:> git branch name  && git checkout name
> git checkout -b name commit_id  # 复制commit_id,可以是分支,也可以是某次commit的id,创建新分支name,并切换
> git branch -d name  # 删除本地分支name
> git branch -D name  # 删除本地分支name(不管它有没有merge)
> git push --delete origin name  # 删除远程分支name

2 将某分支设为master

> git checkout name  # 切换到name分支
> git branch -d master  # 删除本地master分支
> git branch -m name master  # 将name分支重命名为master,也可 git checkout -b master name
> git push -f origin master  # 将本地master分支强制push到远程分支

3 合并分支

> git checkout master  # 切换到master分支
> git merge name  # 在master分支下合并name分支
> git push origin master  # push到远程分支(无冲突),有冲突先解决冲突

4 log查看

> git log  # 查看commit记录
> git reflog  # 查看所有分支的所有操作记录

图示所有分支的历史:

  1. git gui然后在菜单栏上 repository-->visual all branch history
    或者直接使用命令gitk --all
  2. git log --graph --all

5 查看某次commit的修改

> git show 78ec756bb5e9d4fd30e8a1c1d8101601a9cf544c

6 删除除master以外的分支

  1. 删除除master以外的本地分支:
> git branch |grep -v 'master' |xargs git branch -D
  1. 删除除master以外的远程分支:
> git branch -r | grep -v 'master' | cut -c 10- | xargs git push --delete origin

当删除远程分支出现以下问题:

error: dst refspec 2.8.fb matches more than one.

这是因为分支名和tag名相同了,删除方法:

> git push origin :refs/heads/2.8.fb  # 删除远程分支
> git push origin :refs/tags/2.8.fb  # 删除标签tag

7 清空工作区和暂存区

  1. 还没有进行add .commit操作,即清空工作区的文件:
> git checkout .  # 只能清空全部已修改的文件, 但是对于新建的文件和文件夹无法清空
> git clean -fd -n  # 确认要删除的文件
> git clean -fd  # 删除文件其中-f表示文件 -d表示目录

8 git reset 版本回滚与前进

> git reset --mixed commit_id  # 回退版本,且会将暂存区的内容和本地已提交的内容全部恢复到未暂存的状态,
不影响原来本地文件(未提交的也不受影响) ,即回到工作区
> git reset --soft commit_id  # 回退版本,不清空暂存区,将已提交的内容恢复到暂存区,
不影响原来本地的文件(未提交的也不受影响),即回到暂存区,git add .状态
> git reset --hard commit_id  # 回退版本,清空暂存区,将已提交的内容的版本恢复到本地,
本地的文件也将被恢复的版本替换,即所有修改都没有了,回到commit版本状态
> git reset --mixed HEAD~1  # 回退一个版本
> git reset --mixed HEAD~1  # 回退了版本
> git reflog  # 查看分支操作记录,记住前进版本的前6位commit id
> git reset --hard commit_id  #也可前进到该分支
回退版本后git push -f 强制push才能完成push成功

9 利用git和vscode查看修改代码的终极教程

记录原始代码的commit id为commit_id1 (可以git log 查看)

当前修改后最新代码的commit id为commit_id2 (回退版本后可git reflog查看)

> git reset --mixed commit_id1  # 回退到原始版本,且代码修改不影响,vscode里面有git扩展可以查看到基于commit_id1版本的commit_id2版本修改,颜色区分,
> 进行代码修改,方便查看修改部分,写代码
> git reset --mixed commit_id2  # 回退到新版本,且本地修改不变,忘记commit_id2可git reflog查看
> git add . && git commit  # 提交代码
> 可循环进行

10 删除文件

当我们需要删除暂存区或分支上的文件, 同时工作区也不需要这个文件了, 可以使用:

> git rm file_path
> git commit -m 'delete somefile'
> git push

当我们需要删除暂存区或分支上的文件, 但本地又需要使用, 只是不希望这个文件被版本控制, 可以使用:

> git rm --cached file_path
> git commit -m 'delete remote somefile'
> git push

注:删除文件夹可加-r

11 迁移git仓库

适用情况:用别人的项目当作基础,然后开发自己的项目,如果使用fork该项目,那么就算重命名别的项目名称,github上搜索不到,并且在fork项目下的提交不会增加自己的提交贡献(这点非常不爽,滑稽)。
所以可以新建一个仓库,然后将某个项目搬到新仓库,并且保存log和commit。

第一种方法:改remote,在本地已有仓库更方便

#新建仓库 project_new
> git clone  http://xxx/project_old.git   #克隆旧仓库
> git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done  
#在本地分支创建所有远程分支
> git remote set-url origin http://xxx/project_new.git      #改remote的地址
> git push --all   #push所有分支的内容
##如果只要一个master分支,可以只git push -u

第二种方法:直接镜像迁移,只操作远程分支,和本地基本没关系

#新建仓库 project_new
> git clone --bare http://xxx/project_old.git     #从地址克隆裸版本仓库
> cd project_old.git
> git push --mirror http://xxx/project_new.git     #以镜像推送的方式上传到新仓库

12 clone仓库,忽略提交历史方法

> git clone -b master --depth 1 http://xxx/project_new.git res_dir 
# -b 指定分支或commit_id 
# --depth 只保留commit的记录的深度,就是git log下的深度,可以大大降低某些大项目的大小,
# res_dir 保存到目标文件夹,以该目录作为项目的目录
> git fetch --unshallow   # 如果使用了--depth,记得加这个,避免git push推送时出现(shallow update not allowed)的错误,这个命令会重新拉取全部仓库代码


> git checkout --orphan new_branch 
# --orphan 基于当前分支创建一个没有任何提交历史的分支,
# 可用于重新提交到master,或者初始化项目,去除提交历史
# 重新提交master:git add .  && git commit -m "" && git branch -D master (删除原先分支) && git branch -m master(修改当前分支名称)&& git push -f origin master
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 安装Git Git的下载地址:Git官网下载地址 Git本地仓库和命令 配置用户 下载完Git后,右键会有一个Gi...
    TokyoZ阅读 4,528评论 1 7
  • 一、基本概念: 注:对于git的分布式概念及其优点,不重复说明,自己百度或谷歌。本文中涉及到指令前面有$的,在cm...
    大厂offer阅读 1,450评论 0 3
  • (预警:因为详细,所以行文有些长,新手边看边操作效果出乎你的预料) 一:Git是什么? Git是目前世界上最先进的...
    axiaochao阅读 1,947评论 1 8
  • 来源:Git由浅入深之操作与指令作者:惊鸿三世(转载已获得原作者许可,如需转载请与原作者联系) 本篇正式开始介绍G...
    极乐君阅读 1,685评论 9 67
  • 这篇博文是自己在学习git过程中的思考总结。本文仅仅代表个人的看法,如有不妥地方还请本文文末留言。 😊 原文链接g...
    Ming_Hu阅读 1,120评论 4 18