• git使用笔记


     

    1、删除远程文件

    git rm -rf  origin master  filename 

    git commit -m     "asdfasdfa"

    git push 

      不光会删除 远程的文件, 本地的也同样会删除调。

    git rm --cached -rf useless      //删除远程文件夹,保留本地

    git commit -m "remove file from remote repository"

    git push

    2、git 版本回滚:

      

        git reset --hard commitid  //本地代码回到指定的commitid       或者使用:      git reset --hard HEAD~1      1 代表上一个commit号,可以是n   

            // git reset 只是将本地的仓库进行了回滚,远端并没有变化,需要push才能推到远程,此时push会提示 9 的问题。

    可以通过备份远程分支,然后删除远程分支,将本地推送到远程的一个新的分支上。

            git push -f origin branchname//git服务器代码回到指定的commitid

          远程的版本回滚:

        git revert  HEAD  //回滚最后一次提交 ,并且要对这次撤销进行commit 。 上一次提交的log还在,但是修改的内容已经回滚。

    3、打tag 

    假设我们在  develop分支上开发, 当有一个比较固定的版本时,merge到master上,然后打一个 tag

    git checkout master 

    git merge develop

    git tag -a v1.0.1 -m "Drippay SDK "

    git push v1.0.1  将打的tag push 到远程

    git tag -d v1.0.1    删除本地的tag

    git push origin :refs/tags/v1.0.1    同时删除远程的tag

    git tag         查看本地的所有tag

    参考:

      http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001376951885068a0ac7d81c3a64912b35a59b58a1d926b000

    3、分支创建与删除

           在当前分支上创建分支: 

      git checkout -b testBranch   // 本地就会有一个 testBranch 分支,但是远程还是没有 该分支

      git push origin testBranch   // 远程会有一个testBranch分支

      提交分支数据到远程服务器
        git push origin <local_branch_name>:<remote_branch_name>
        例如:
        git push origin 2.0.1.20120806:2.0.1.20120806
        一般当前如果不在该分支时,使用这种方式提交。如果当前在 2.0.1.20120806 分支下,也可以直接提交   git push
     
      删除远程分支      git push origin -d develop    // 删除远程 develop分支
     
           删除本地分支      git branch -d  test1              //删除本地分支 test1,不能再test1分支上删除test1分支
     
        https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%9A%84%E6%96%B0%E5%BB%BA%E4%B8%8E%E5%90%88%E5%B9%B6
     
    从某个tag上创建分支:
     
    git  branch  newbranchname tag_id    (创建好之后再切换分支)
     

    4、 HEAD detached at origin/testBranch

    问题出现:
           当本地对某些文件进行了修改, git add 了这几个文件
          git checkout origin develop   // 想拉取远程的某个分支时,就会出现 detached 问题
    解决办法:
          ·  git branch temp        //  将本地修改  git add 
           git checkout develp
                       git merge temp   // 将 本地修改merge到develop分支中去了
          git branch -d temp  // 将temp分支删除掉
     

    5、初始化仓库 

       ssh-keygen -t rsa -C "your_email@youremail.com"
       ssh-add ~/.ssh/rsa_id                  //将私钥增加到缓存中
     
      如果出现错误:  Could not open a connection to your authentication agent.  需要执行: ssh-agent bash
      将公钥上传到某个git网站中
      ssh  -T  git@192.168.xxx.xxx       // 测试是否能连接到远程
     
      //配置个人信息  
      git config --global user.name "abc"
       git config --global user.email "def"
        
    mkdir ~/Hello-World 在user目录下创建一个名为Hello-World的项目文件夹(~代表用户目录,即:C:Documents and Settings当前登陆系统的用户名)
    cd ~/Hello-World 更改当前目录到Hello-World目录中
    git init 初始化该文件夹,将会提示以下信息:
    git clone url

      在某台电脑上已经初始化了github中仓库配置后,gitclone 一个 github项目地址就可以,不需要再配置相应的 邮箱用户名等信息。 

    (可能原因为: github为开源项目不需要配置 用户信息等)

    6、 git log -p 查看 每个git log的具体改动情况

    7、git fetch 和 git pull 的区别

      Git中从远程的分支获取最新的版本到本地有这样2个命令:
      a. git fetch:相当于是从远程获取最新版本到本地,不会自动merge  

    Git fetch origin master
    git log -p master..origin/master
    git merge origin/master

      以上命令的含义:
         首先从远程的origin的master主分支下载最新的版本到origin/master分支上
         然后比较本地的master分支和origin/master分支的差别
         最后进行合并
         上述过程其实可以用以下更清晰的方式来进行:

    git fetch origin master:tmp
    git diff tmp 
    git merge tmp

        从远程获取最新的版本到本地的test分支上
         之后再进行比较合并
      2. git pull:相当于是从远程获取最新版本并merge到本地

        git pull origin master

        上述命令其实相当于git fetch 和 git merge
        在实际使用中,git fetch更安全一些
        因为在merge前,我们可以查看更新情况,然后再决定是否合并

    注: merge 并不是将远端文件替换到本地,而是当远端和本地出现文件不同时: 会有merge的冲突,并让开发者决定是否合并或者进行处理。

    如果想放弃所有本地的修改,将远程文件拉取到本地进行替换:

    git fetch --all          
    只是下载远程的库的内容,不做任何的合并
    git reset --hard origin/master
    把HEAD指向刚刚下载的最新的版本

    8、git status 查看状态: 出现的三种状态

      1、Untracked files

        这种情况出现在新建几个文件(版本中不存在的),但是没有提交到暂存区的的时候

      2、Changes not staged for commit

        这种情况出现在版本已有文件遭到修改但是还没提交到暂存区的时候

      3、Changes to be committed

        这种情况出现在提交到暂存区之后的时候

    4/   Your branch is ahead of 'origin/master' by 1 commit.

      原因: 远程已经的仓库 滞后 远端,  

      git reset --hard HEAD~x   // x表示滞后远程 x个commit

     9、push 到远端时,本地仓库版本  滞后  远程 仓库

    远端的代码库和本地的代码库 版本不匹配,可以先git pull 拉取远端到本地进行merge

    注意merge之后还需要进行 add、commit操作,然后再push到远程。

    注意: push 时报错如下: (可能是远程master分支被保护起来了,develop没有权限提交代码到master分支)

        [remote rejected] master -> master (pre-receive hook declined)
        error: failed to push some refs to 'git@192.168.65.10:YHZ_iFlytek_MDP/DripBootGuider.git'

    10、切换分支时注意事项:

      当本地对某个文件做了修改,但是没有git commit时,这时候切换到另一个分支,本地的文件还是修改的状态,会影响到另一个分支。

    解决办法:

      方法1 : 如果在切换分支之前,git commit 则会 把修改提交到本地仓库(非远程,因为没有push),修改的文件不会带到另一个分支。

          方法2  :  如果还没有开发完成,不想commit, 可以用 git stash (将修改压栈,git status 命令看不到待提交的内容了)  ,切换到其他分支不会看到 当前分支的修改。

    再切换到当前分支时,用  git stash pop命令进行出栈操作即可(git status 又可以看到待提交的内容了)。

     

    11、分支合并

    https://www.jianshu.com/p/58a166f24c81

    总结: 切换分支时,需要了解各个分支之间的关系,当前的修改需不需要带到下一个分支,不需要则需要保存当前的工作空间

    git merge --no-ff :  (ff代表 fast forward)

      用于禁止快进式合并,快进式合并如下:

     合并前: 

              A---B---C feature
             /
    D---E---F master
    

     快进式合并: featrue合并到master后:

              A---B---C feature
             /         master
    D---E---F 

    --no-ff 合并效果: 

              A---B---C feature
             /         
    D---E---F-----------G master

      使用--no-ff好处:

      由上面的合并记录就可以看出区别: --no-ff 不会将feature分支的commitId合并到master上,后续如果需要版本回退时直接可以回退到F的commitId。 但是如果使用快进式合并,在纷杂的提交记录(D-E-F-A-B-C)找到合并之前的commit号还是比较费劲的。

    git merge --no-commit : (合并后是否自动产生一个commitId)

    12、通过git stash 暂存本地代码

    当远程分支别人更新了代码,本地代码又做了修改(不想放弃辛勤劳作,不能 git revert),这时候git pull 会失败。(git pull 不会把远程代码合并到本地)。这时候可以通过 git stash 将本地修改暂存(git stash list 查看暂存的列表)。

    这时候再  git pull 就不会出现失败了,之后想把自己写的代码合到远程最新的代码中可以通过:

             git stash pop  stash@{0}

    其中: stash@{0} 是将最新的 stash 合并到本地。 合并之后自己的修改就不会丢了,修改好之后可以选择 push到远程。

    13. 重命名分支,并提交到云端

       a) 删除云端分支,     git push --delete origin yueduGP

       b) 重命名本地分支: git branch -m  <old_branch_name>  <new_branch_name> 

                如果想重命名当前分支: git branch -m   <new_branch_name>  

      c)  将重命名的本地分支提交到云端: git push origin <new_branch_name>

    stash的删除  :

    • git stash drop stash@{0}          // 删除栈顶的stash
    • git stash clear                           // 删除所有 stash 

    14. 本地代码合并已经commit, 但是未提交,远端代码更新

    a) git pull 提示如下:

    You have not concluded your merge (MERGE_HEAD exists)

    b) 解决方法1:保留这次本地合并commit的代码 

          git merge --abort

      git reset --merge

           git pull

    解决方法2: 放弃所有本地代码

      git fetch --all

           git reset --hard origin/master 

           git fetch

  • 相关阅读:
    Java JDBC 编程指北
    Java 版学生成绩管理系统,附源码!
    【剑指 Java】第 2 弹:剑指大厂,这份数据库面试总结请收好
    手把手教你制作纯手写电子签名
    【剑指 Java】第 1 弹:靠这份 Java 基础知识总结,我拿到了满意的 Offer
    【剑指 Java】第 3 弹:纯干货,计算机网络面试知识点总结
    深入死磕 Java IO 流
    【剑指 Java】第 4 弹:绝对硬货,Spring 面试知识点总结大全
    聊聊技术写作中的那些神兵利器
    关于ply, obj, 3ds 等三维模型文件的Loader
  • 原文地址:https://www.cnblogs.com/NeilZhang/p/6999794.html
Copyright © 2020-2023  润新知