git常用命令

git常用命令Git常用命令汇总以及其它相关操作(转载)一、常用的git命令–文件目录操作命令mkdir*创建一个空目录*指目录名pwd显示当前目录的路径。cat*查看*文件内容gitr

大家好,又见面了,我是你们的朋友全栈君。

Git常用命令汇总以及其它相关操作(转载)

一、常用的git命令

       –文件目录操作命令

 mkdir *   创建一个空目录 *指目录名
 pwd       显示当前目录的路径。
 cat *     查看*文件内容
 git rm *  删除**文件

       –git初始化操作

    git init                   把当前的目录变成git仓库,生成隐藏.git文件。
    git remote add origin url  把本地仓库的内容推送到GitHub仓库。
    git clone git@url/test.git 从远程库克隆
    git add *                  把x文件添加到暂存区去。
    git commit –m "*"          提交文件 –m 后面的是注释。   

       –git 克隆分支

    git clone xxx.git                最简单直接的命令
    git clone xxx.git "指定目录"      clone到指定目录
    git clone -b branchname xxx.git  clone时创建新的分支替代默认Origin HEAD(master)

      –clone 远程分支

       git clone 命令默认的只会建立master分支,如果你想clone指定的某一远程分支(如:dev)的话,可以如下:

            1. 查看所有分支(包括隐藏的)  git branch -a 显示所有分支    

           * master
           remotes/origin/HEAD -> origin/master
           remotes/origin/dev
           remotes/origin/master

                2. 在本地新建同名的(“dev”)分支,并切换到该分支

           git checkout -t origin/dev 

#该命令等同于: git checkout -b dev origin/dev

     –查看命令

   git status        查看仓库状态
   git diff  *       查看X文件修改了那些内容   
   git log           查看历史记录
   git reflog        查看历史记录的版本号id(记录你的每一次命令,不论是否提交)
   git log --pretty=oneline 如果信息量太多可以进行比较好的列表显示   

     –版本回退

   git reset –hard HEAD^       回退到上一个版本
   git reset --hard HEAD~第几个 如果想回退到第3个版本,使用git reset –hard HEAD~3
   git reset --hard 057d       回退到某一个具体的版本号

     –撤销修改

   git checkout file-name 恢复某个已修改的文件(撤销未提交的修改):
   git revert HEAD        还原最近一次提交的修改:
   git revert commit-id   还原指定版本的修改

     –分支管理

复制代码
   git branch                           查看本地所有的分支
   git branch -a                        查看远程所有的分支
   git branch name                      创建分支
   git branch –d dev                    删除dev分支
   git push origin --delete dev         删除远程的dev分支
   git branch -m dev develop            重命名分支
   git checkout –b dev                  创建dev分支 并切换到dev分支上
   git merge dev                        在当前分支上合并dev分支代
   git push origin zyf-dev              把当前新增的zyf-dev分支推送到远程库(远程仓库没有给分支则会新建立该分支)
   git checkout — *                     把XX文件在工作区的修改全部撤销。
   git checkout master                  切换回master分支
   git push --set-upstream origin dev   提交修改并创建远程分支dev
复制代码

    –tag相关操作

   git tag                            列出所有的tag
   git tag name                       打轻量标签 name
   git tag -d name                    删除本地的tag
   git push origin --delete tag name  删除远程的tag
   git show name                      查看tag信息
   git push origin name               将tag提交到远程

    –隐藏的文件

   git stash                          把当前的工作隐藏起来 等以后恢复现场后继续工作
   git stash list                     查看所有被隐藏的文件列表
   git stash apply                    恢复被隐藏的文件,但是内容不删除
   git stash drop                     删除文件
   git stash pop                      恢复文件的同时 也删除文件

    –查看远程库信息(git  remote的用法) 

   git remote                         查看远程库的信息
   git remote –v                      查看远程库的详细信息
   git remote add  name url           添加远程仓库
   git remote rename oldname newname  重命名仓库
   git remote rm                      删除仓库

    –将远程分支拉取到本地

   #方法一
git checkout -b 本地分支名x origin/远程分支名x
#方法二
git fetch origin 远程分支名x:本地分支名x

     –git pull操作

复制代码
   #git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并,基本的格式如下:
   $ git pull <远程主机名> <远程分支名>:<本地分支名>

   #取回origin主机的next分支,与本地的master分支合并,需要写成下面这样
   $ git pull origin next:master

   #如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
   $ git pull origin next

   #上面命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再做git merge。
   $ git fetch origin
   $ git merge origin/next

   #在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。
#比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动”追踪”origin/master分支。 #Git也允许手动建立追踪关系。 $ git branch --set-upstream master origin/next #上面命令指定master分支追踪origin/next分支。如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名。 $ git pull origin
复制代码

    –git 设置大小写敏感

        Windows上的Git默认是大小写不敏感的,这样多平台写作就可能会出现问题。Win上的Git设置为大小写敏感的命令如下

    git config core.ignorecase false  

    –git 设置忽略文件或文件夹权限修改

    git config core.filemode false

    –创建追踪分支

        不带任何参数的git push,默认只推送当前分支,这叫做simple方式。

        此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。如果要修改这个设置,可以采用git config命令。

   $ git config --global push.default matching
   # 或者
   $ git config --global push.default simple (最好使用这种方式)
   $ git branch --track  master origin/master //在使用 git branch 命令时加上 '--track' 参数, 来手动创建一个追踪分支

    —切换git 命令提示中文到英文 

   // ubuntu装的git不知道怎么就出现全中文的提示,不太好,果断切换到中文了,切换方法如下:
   // 1:写入
   echo "alias git='LANG=en_GB git'" >> ~/.bashrc

   // 2:生效
   source ~/.bashrc

    –git 删除未添加到版本中的文件或者文件夹

        git checkout 只能回退在版本中的修改或者删除, 对于新添加的文件是没有作用的, 也就是说, 新建的文件或者文件夹是:Untracked files, 要删除或者清理掉这些文件,需要使用 git clean 命令:

复制代码
   // 删除 untracked files
   git clean -f
 
   // 连 untracked 的目录也一起删掉
   git clean -fd
 
   // 连 gitignore的untrack 文件/目录也一起删掉 (一般这个是用来删掉编译出来的 .o一类的文件)
   git clean -xfd
 
   // 在使用清理 git clean之前,建议加上 -n 来先看看会删掉哪些文件,防止重要文件被误删
   git clean -nxfd
   git clean -nf
   git clean -nfd
复制代码

三、常出错误:
     

      1:There is no tracking information for the current branch…
          则说明本地分?支和远程分?支的链接关系没有创建,用命令:
          git branch –set-upstream branch-name origin/branch-name。

      2: ![rejected] dev -> dev (non-fast-forward)  … Updates were rejected because the tip of your current branch
          推送失败,因为远程代码的最新提交和你试图推送的提交有冲突,解决办法也很简单,先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送
    
      3:CONFLICT (content): Merge conflict in . . .
          这回git pull成功,但是合并有冲突,需要手动解决,解决的方法和分支管理中的解决冲突一样。解决后,提交,再push:
    
      4: You are not currently on a branch, so I cannot use any
          解决办法:git checkout master

      5:Your branch is behind ‘origin/master’ by 1 commit, and can be fast-forwarded.
          上面的显示的意思是,有一个更新还没有反应到本地来,可能是别人往server上提交了一点东西。 
          可以使用git pull命令拿这些更新到本地来。

      6:在执行 git push 时可能会看到如下消息: 

      warning: push.default is unset; its implicit value is changing in
      Git 2.0 from 'matching' to 'simple'. To squelch this message
      and maintain the current behavior after the default changes, use:
      git config --global push.default matching
      To squelch this message and adopt the new behavior now, use:
      git config --global push.default simpl

           <span role="heading" aria-level="2">git常用命令

           解决办法:‘matching’ 参数是 Git 1.x 的默认行为,如果你执行 git push 但没有指定分支,它将 push 所有你本地的分支到远程仓库中对应匹配的分支。而 Git 2.x 默认的是 simple,意味着执行 git push 没有指定分支时,只有当前分支会被 push 到你使用 git pull 获取的代码。 
          根据提示,修改git push:

     git config --global push.default matching

           再次执行git push 就行了。 

       7:

You asked to pull from the remote ‘origin’, but did not specify:a branch. Because this is not the default configured remotefor your current branch, you must specify a branch on the command line.

           解决办法:找到:.git/config  修改如下

     [branch "master"]
      remote = origin
      merge = refs/heads/master

       8:ERROR: Permission to user1/test.git denied to user2   fatal: The remote end hung up unexpectedly

          账户冲突,下面有针对讲解

      9: 添加的ssh不起作用?

           ssh 的添加一定要在root用户权限在添加,其他的权限不起作用,切记!

 

 四、经验之谈:
       1:git revert 和 git reset的区别 
            开始感觉两者一样,但是在客户端和命令行窗口操作之后发现大大的不同,看一个例子:我先提交三次1,2,3 id号分别是(15d5f70,a167eb1,8fbfe3f)如下图

            <span role="heading" aria-level="2">git常用命令

          然后执行版本回退 git reset –hard a167 如图:

            <span role="heading" aria-level="2">git常用命令

           说明执行git reset –hard ** 版本回退是撤销某次提交,但是此次之后的修改都会被退回到暂存区,因为上面显示有提交(by 1 commit)
           同理执行 git revert –hard a167
          git revert是用一次新的commit来回滚之前的commit
      在回滚操作上看,效果一样。但是在日后继续merge以前的老版本时有区别。revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。 
          得到结论:git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,
只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。

       这样在版本回退的时候就比较的好,比如本地dev分支,远程master分支,某一次的上线发现线上有重大的bug,然后你reset本地代码到前一个版本,在你git push 的时候git会报一个错误:“说你的本地分支版本低于远程master分支的版本,让你先去pull 下来代码,再提交”,这就不行了,你pull下来的代码还是最新版有bug的代码,不进行pull代码,master分支又不让你提交。解决这个问题还得使用 revert 来进行 “回退”操作,为什么加引号呢,是因为这种回退是向前提交一次中和了上次的修改,这就比较好了,这样你revert之后相当于指针向前移动一次,本地版本dev高于远程master版本,这时你就可以git push 本地代码到远程了。也就是说,git reset 对未提交到(git push)远程的修改做回滚比较好,如果要回滚本地,同时想远程也回滚,就要用到revert

 

五、常用修改:
        1:避免每次提交都输入用户名和密码
            原因是使用了https方式 puh 在termail里边 输入  git remote -v 可以看到形如一下的返回结果

      origin https://github.com/git/librarysystem.git(fetch)
      origin https://github.com/git/librarysystem.git(push)

          下面把它换成ssh方式的。

      git remote rm origin
      git remote add origin git@github.com:yu/demo.git
      git push origin 

        2:添加忽略文件 .gitignore 
             .gitignore配置文件用于配置不需要加入版本管理的文件。
             配置语法: “/”  开头表示目录;  “*”  通配多个字符;  “?”  通配单个字符   “[]” 包含单个字符的匹配列表;  “!”  表示不忽略(跟踪)匹配到的文件或目录;
            说明:git 对于 .ignore 配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效;
            示例:(1) foder/*     忽略目录foder下的全部内容,不管是根目录下的 /foder/ 目录,还是某个子目录 /list/foder/ 目录,都会被忽略。
                 (2) /foder/*   说明:忽略根目录下的 /foder/ 目录的全部内容;
                 (3) /*!.gitignore
                             !/fw/bin/
                             !/fw/sf/
                             说明:忽略全部内容,但是不忽略 .gitignore文件,根目录下的 /fw/bin/ 和 /fw/sf/ 
             注意问题: .gitignore文件只对还没有加入版本管理的文件起作用,如果之前已经用git把要忽略的文件纳入了版本库,就不起作用了。

         3:如何在同一台电脑上使用两个git账户

          问题描述:作为程序员有时候是有多个的项目,而且每个项目git的用户名,邮箱等,都不一样。就我来说,我在github上有一个账号,自己开发一些东西,同时我参与的也有项目需要连接别人的github账号,在我电脑上只有一个git客户端,本地一个身份用户,开始的时候我自己开发是用ssh方式,参与的项目的是用https连接,但是https每次都需要输入密码,非常不方便,所以想转成ssh连接,利用命令:

       $ git remote rm origin
       $ git remote add origin git@github.com:yu/demo.git 
       $ git push origin       

              转换成功,不幸的是push的时候出错了:ERROR: Permission to user1 denied to
             这种情况的解决方式是方法,使用本地托管多个个ssh的密钥,不同的账号是用不同的密匙。

             第一步:生成SSH Key

                执行命令,如下图:

                <span role="heading" aria-level="2">git常用命令

              具体说明:

复制代码
       $ ssh-keygen -t rsa -C "your_email@youremail.com"
       Creates a new ssh key using the provided email Generating public/private rsa key pair.
       #输入将要保存的路径,我的默认为当前路径(/c/Users/zhaoyafei/.ssh/id_rsa),但是不能使用默认文件id_rsa,要添加新账户就要生起一个成新的好记的名字,例如id_rsa_work
       Enter file in which to save the key (/c/Users/zhaoyafei/.ssh/id_rsa):
       #输入回车后提示输入一个类似于密码的号,直接回车就行
       Enter passphrase (empty for no passphrase):
       Enter same passphrase again:
复制代码

             第二步:识别新的私钥
                默认SSH只会读取id_rsa,所以为了让SSH识别新的私钥,需要将其添加到SSH agent   

       ssh-add ~/.ssh/id_rsa_work
      //该命令如果报错:Could not open a connection to your authentication agent.可执行 ssh-agent bash 命令后再执行ssh-add -l 看是否成功。

            第三步:修改config文件
               该文件用于配置私钥对应的服务器。内容如下:

复制代码
       # Default github (默认的)
         Host github.com
         HostName github.com
         User git
         IdentityFile ~/.ssh/id_rsa

       # second user(work@gmail.com)
         Host github_work
         HostName github.com
         User git
         IdentityFile ~/.ssh/id_rsa_work
复制代码

              这样配置,也就是使用hostname为github.com会根据用户名的不同,去使用不用的private key。github上,也可以添加对应的公钥。其实这个配置是关于ssh的与git无关,只是git使用的方式是ssh的方式。Host可随意,方便自己记忆,后续在添加remote是还需要用到。

            第四步:将SSH key输入到GitHub网站中    
              将生成的id_rsa_work.pub输入到GitHub网站中就可以了,输入完成后单击Add key后,会看到git-tutorial已经被添加进去了。 配置完成后,在连接非默认帐号的github仓库时,远程库的地址要对应地做一些修改,比如现在添加abc帐号下的一个仓库test,则需要这样添加:git remote add test git@github-work:abc/test.git #并非原来的git@github.com:abc/test.git 这样每次连接都会使用id_rsa_abc与服务器进行连接。

            注意:github根据配置文件的user.email来获取github帐号显示author信息,所以对于多帐号用户一定要记得将user.email改为相应的email(work@mail.com)。我遇到的问题是本地单一用户,链接不同的github账号,所以用户配置可以采用全局配置。如果不同本地用户(不同的身份标识,即需要本地使用不同的用户名),那么git就不要使用有–global的配置,可以按照下面的方法: 

复制代码
 1)设置局部的user.name和user.email
     git config user.name "xxxxxx"
     git config user.email "xxx@xxx.com"

2)设置全局的user.name和user.email git config --global user.name "xxxxxx" git config –-global user.email "" 
复制代码

六、题外话(相关概念)

     Git – 版本控制工具
         Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper,后者之前一直是 Linux 内核开发人员在全球使用的主要源代码工具。开放源码社区中的有些人觉得 BitKeeper 的许可证并不适合开放源码社区的工作,因此 Torvalds 决定着手研究许可证更为灵活的版本控制系统。尽管最初 Git 的开发是为了辅助 Linux 内核开发的过程,但是我们已经发现在很多其他自由软件项目中也使用了 Git。例如 最近就迁移到 Git 上来了,很多 Freedesktop 的项目也迁移到了 Git 上。

     Github – 一个网站,提供给用户空间创建git仓储,保存用户的一些数据文档或者代码等
         作为开源代码库以及版本控制系统,Github目前拥有140多万开发者用户。随着越来越多的应用程序转移到了云上,Github已经成为了管理软件开发以及发现已有代码的首选方法。如前所述,作为一个分布式的版本控制系统,在Git中并不存在主库这样的概念,每一份复制出的库都可以独立使用,任何两个库之间的不一致之处都可以进行合并。GitHub可以托管各种git库,并提供一个web界面,但与其它像 SourceForge或Google Code这样的服务不同,GitHub的独特卖点在于从另外一个项目进行分支的简易性。为一个项目贡献代码非常简单:首先点击项目站点的“fork”的按 钮,然后将代码检出并将修改加入到刚才分出的代码库中,最后通过内建的“pull request”机制向项目负责人申请代码合并。已经有人将GitHub称为代码玩家的MySpace。

    GitLab – 基于Git的项目管理软件
             GitLab 是一个用于仓库管理系统的开源项目。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。三者都是基于git的,可以说是git的衍生品。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/154373.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 图像风格迁移_图像风格迁移算法

    图像风格迁移_图像风格迁移算法风格迁移指的是两个不同域中图像的转换,具体来说就是提供一张风格图像,将任意一张图像转化为这个风格,并尽可能保留原图像的内容

    2022年10月21日
  • ddr2 odt_ddr2电压

    ddr2 odt_ddr2电压经常有人会说支持DDR2的主板存在偷工减料的现象。事实上这是由于DDR2内存中使用了一项新的ODT技术,它可以在提高内存信号稳定性的基础上节省不少电器元件。主板终结是一种最为常见的终结主板内干扰信号的方法。在每一条信号传输路径的末端,都会安置一个终结电阻,它具备一定的阻值可以吸收反射回来的电子。但是目前DDR2内存的工作频率太高了,这种主板终结的方法并不能有效的阻止干扰信号。若硬要采用主板终结

  • 编写高效的软件缺陷报告模板_软件缺陷导致严重后果的典型案例

    编写高效的软件缺陷报告模板_软件缺陷导致严重后果的典型案例测试工程师需要利用对需求的理解、高效的执行力以及严密的逻辑推理能力,迅速找出软件中的潜在缺陷,并以缺陷报告的形式递交给开发团队,这看起来是不是有点像侦探柯南呢。缺陷报告是测试工程师与开发工程师交流沟通的重要桥梁,也是测试工程师日常工作的重要输出。作为优秀的测试工程师,最基本的一项技能就是,把发现的缺陷准确无歧义地表达清楚。“准确无歧义地表达”意味着,开发工程师可以根据缺陷报…

  • 【JAVA面试必会】JMM高并发详解(java内存模型、JMM三大特征、volatile关键字 )「建议收藏」

    【JAVA面试必会】JMM高并发详解(java内存模型、JMM三大特征、volatile关键字 )「建议收藏」volatile一定能保证线程安全吗?禁止指令重排序volatile禁止指令重排序的原理。JMM就是Java内存模型(javamemorymodel)。因为在不同的硬件生产商和不同的操作系统下,内存的访问有一定的差异,所以会造成相同的代码运行在不同的系统上会出现各种问题。所以java内存模型(JMM)屏蔽掉各种硬件和操作系统的内存访问差异,以实现让java程序在各种平台下都能达到……………

  • H2 数据库入门和基本使用「建议收藏」

    H2 数据库入门和基本使用「建议收藏」1、下载安装包H2官网:http://h2database.com/html/main.html2、安装H2数据库选择安装目录->点击下一步->安装->完成

    2022年10月12日
  • activity中onResume方法详解[通俗易懂]

    activity中onResume方法详解[通俗易懂]onResume比如做一个音乐播放程序,在播放过程中,突然有电话打进来了,这时系统自动调出电话,而你的音乐播放程序置于后台,触发了onPause方法。当你电话结束后,关闭电话,又自动回到音乐播放程序,此时,触发onResume方法,这时,如果你之前在onPause的时候记录了播放点,就可以在onResume方法里来继续播放。onResume方法是Activity第一次创建时重新加载实例时调用…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号