zoukankan      html  css  js  c++  java
  • git命令使用

    参考网址:http://luolei.org/dotfiles-tutorial/

                  http://www.ruanyifeng.com/blog/2014/06/git_remote.html

              http://www.cnblogs.com/hzijone/p/4844372.html

          https://marklodato.github.io/visual-git-guide/index-zh-cn.html?no-svg

        http://mux.alimama.com/posts/799



    一次完整的实例操作:
    创建公钥:ssh-keygen。将公钥添加到github上
    清空git内容,
    rm -rf .git 
    
    git init 
    git add  -A
    git commit -m ""
    //在github官网上创建react-demos仓库
    git remote add origin git@github.com:jundahzijone/react-demos.git
    git push origin master
    git pull origin master
     

     测试连接github:

     ssh -T git@github.com


    
    

    错误:

    Permission denied (publickey).
    fatal: Could not read from remote repository.

    Please make sure you have the correct access rights
    and the repository exists.

    这是因为没有公钥,解决方法:http://blog.sina.com.cn/s/blog_53786db50102e9ma.html

    错误:ssh “permissions are too open” error

    解决方法: http://stackoverflow.com/questions/9270734/ssh-permissions-are-too-open-error

    分支:本地分支与远程分支这两种

    查看本地分支

    git branch 

    git 切换本地分支

    git checkout '分支名'

    删除本地分支

    git brach -d  '分支名'

    新建本地分支

    git branch '分支名'

    合并分支

     git merge [name] ----将名称为[name]的分支与当前分支合并

    查看远程分支

    git branch -av

    git 删除远程分支

     git push origin --delete <branchName>

    创建远程分支

    git push origin  '分支名'

    git remote

    Git要求每个远程主机都必须指定一个主机名。git remote命令就用于管理主机名。

    查看远程仓库:$ git remote -v
    添加远程仓库:$ git remote add [name] [url]
    删除远程仓库:$ git remote rm [name]
    重命名远程仓库: $ git remote rename <原主机名> <新主机名>
    列出所有远程主机: $ git remote || git remote show
     
    git push命令用于将本地分支的更新,推送到远程主机
    git push <远程主机名>  <本地分支名>:<远程分支名>
    git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并
    git pull  <远程主机名>  <远程分支名>:<本地分支名>
     

    一旦远程主机的版本库有了更新(Git术语叫做commit),需要将这些更新取回本地,这时就要用到git fetch命令。

    远程主机的更新,全部取回本地 : git fetch <远程主机名>
    只想取回特定分支的更新,可以指定分支名: git fetch <远程主机名> <分支名>
    查看自己仓库的当前分支提交ID的树状图:
    git log --graph --oneline 
    
    
    
    可以查看commit之间的父子关系
    
    
    git log --pretty=raw
    撤消某次提交:
    查找版本号:
    git log --pretty=oneline   
    git reflog
    
    
    
    回滚版本号:
    git reset

    -- soft
    保留源码,只回退到commit 信息到某个版本.不涉及index(暂存区)的回退,如果还需要提交,直接commit即可
    -- hard
    源码也会回退到某个版本,commit和index 都回回退到某个版本.(注意,这种方式是改变本地代码仓库源码)
     
    revert 撤消某次操作
    查找版本号
    git log --pretty=oneline   
    git reflog
    
    
    
    回滚到去除commit: 
    git revert [version]
    
    
    
    查看git log 历史
    git log --pretty=format:"%h - %an, %ar : %s"
    git log --graph --oneline --pretty=format:"%h - %an, %ar : %s"
    获取最近一次修改的文件
    git diff --name-only HEAD~ HEAD
    

      获取两次commit修改的文件

    git diff --name-only <commit-1> <commit-2>
    

      

      远程分支路径错误:

    git remote rm origin
    git remote add <远程分支名>  <路径>
    

      

    分支合并(merge、rebase)
    merge:
    合并前,索引必须和当前提交相同。
    1、如果另一个分支是当前提交的祖父节点,那么合并命令将什么也不做
    2、另一种情况是如果当前提交是另一个分支的祖父节点,就导致fast-forward合并。指向只是简单的移动,并生成一个新的提交。


     否则就是一次真正的合并。默认把当前提交(ed489 如下所示)和另一个提交(33104)以及他们的共同祖父节点(b325c)进行一次三方合并。结果是先保存当前目录和索引,然后和父节点33104一起做一次新提交。

    Rebase:
    衍合是合并命令的另一种选择。合并把两个父分支合并进行一次提交,提交历史不是线性的。衍合在当前分支上重演另一个分支的历史,提交历史是线性的


    下载指定版本号
    git clone -b v1.0.1 https://github.com/named-data/mini-ndn/
    
    -b表示取特定的分支,v1.0.1指定版本号,后面是github仓库的地址


    github 与 SVN 的对比:








    个人理解:Git最大的优势在于两点:易于本地增加分支和分布式的特性(日志与提交)

    git优势:

    1、因为本地有一个仓库,因此可以在本地进行建立多个分支,实现分布式操作

    分布式操作的开发人员一般都是开发不同模块,因此不会出现相同文件被修改的情况。

    只是要使用另外开发人员所修改的最新内容,而通过分支的切换,则可以跳转到主干的最新内容上

    2、在本地建立仓库,主要是实现日志储存在本地,体现分布式思想,减少服务器压力。

    而本地仓库与远程仓库的日志是一模一样的。可以在本地先commit多次,再一次git remote push 到远程。

    而远程服务器与本地仓库显示的日志内容一样的。

    svn: 在本地建立新分支,则只能新建服务器仓库,如果要建立分支创建新的内容,因为代码及日志的提交都是上传到集中服务器上,造成不同分支合并难度大。

    常见错误:

     error: 

    gnutls_handshake() failed: A TLS packet with unexpected length was received

    solve:

    git config --global http.postBuffer 2000000000

     

  • 相关阅读:
    [记录]Python2.7使用argparse模块
    [记录]MySQL读写分离(Atlas和MySQL-proxy)
    [记录]Shell中的getopts和getopt用法
    [记录]CentOS搭建SVN服务器(主从同步)
    [记录]Zabbix3.4配置监控Oracle12c的存活状态和表空间使用率
    [记录]一则清理MySQL大表以释放磁盘空间的案例
    [原创]Oracle 12c的备份和恢复策略
    Linux awk用法
    Oracle数据库学习笔记
    oracle无法删除当前连接用户方法
  • 原文地址:https://www.cnblogs.com/hzijone/p/4844372.html
Copyright © 2011-2022 走看看