美文网首页
git的常用操作

git的常用操作

作者: L_Ta | 来源:发表于2019-08-02 20:16 被阅读0次

    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的常用操作

          本文链接:https://www.haomeiwen.com/subject/jfokdctx.html