• day117-Git & GitHub


    Git
     1.安装Git,按默认选项安装即可。
     
     2.安装完成后,在命令行输入:
      $ git config --global user.name "Your Name"
      $ git config --global user.email "email@example.com"
      因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
      
     3.右击项目的目录,点Git Bash Here,通过git init命令把这个目录变成Git可以管理的仓库:
      $ git init
       当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的(勿删),
       如果没有看到.git目录,那是因为这个目录默认是隐藏的。
      
     4.把文件添加到仓库:先添加后提交
      使用 $ git status 弹出很多文件夹或者文件是红色的,说明还没有加入到仓库中。
      先添加:
       $ git add 文件名 选择该文件加入
       $ git add .      选择所有文件或者文件夹加入,接着$ git status,弹出所有文件都是绿色的。
      后提交:
       $ git commit -m "本次提交的说明"
     
     
    Git常用命令:  
     1、$ git status 查看有没文件被修改或有没添加到仓库
     
     2、$ git diff   查看difference,查看做了什么修改
     
     3、$ git log 查看版本记录:版本号、姓名、邮箱、说明
         commit 4ed3bb01487526a38dafdab0ed38ab95bd854aef (HEAD -> master) 此行中间部分为版本号
         Author: daxiong <873494264@qq.com>
         Date:   Fri May 22 14:56:16 2020 +0800
           添加了欧美
         如果记录太多,按enter继续往下看,按q退出。
         
     4、$ git reflog
       查看命令历史,可以找到最新的版本。当reset回到旧的版本,$ git log是无法查看最新版本的。
       每一行最前面的是版本号。
       e01e569 (HEAD -> master) HEAD@{0}: commit: 删除了欧美
       4ed3bb0 HEAD@{1}: reset: moving to 4ed3bb0
       95cb1f2 HEAD@{2}: reset: moving to 95cb1f24469be5041c85100355f58c3507708890
       4ed3bb0 HEAD@{3}: commit: 添加了欧美
       95cb1f2 HEAD@{4}: commit (initial): 创建的第一个版本
       
     5、$ git reset --hard 版本号 
            回到某个版本
            
     6、$ git checkout 文件名 撤销修改。不想把文件添加和提交到仓库,只想撤销修改,回到原内容。
      $ git checkout .  .是所有文件
       
     7、面试题:如果代码出现bug,你如何解决?
       使用git stash把正在开发的功能放在某个地方,然后创建一个bug分支,然后对bug进行修改,
       修改完成之后,合并到master分支,最后删除bug分支。
       
       简记:git stash-->git branch bug-->git checkout bug--修改bug-->
         git checkout master-->git merge bug-->git stash pop
       
       7.1 把正在开发的功能放在某个地方:
            $ git stash
       
       7.2 创建一个bug分支:
            $ git branch bug
            相当于把master的代码复制一份放在bug分支里面。
       7.3 查看分支列表:
            $ git branch
            86159@LAPTOP-AS7C46T9 MINGW64 ~/PycharmProjects/d522hot (master)
            $ git branch
              bug
            * master
            可以看到当前分支是master
       7.4 切换到bug分支:
           $ git checkout bug
           Switched to branch 'bug'
           然后使用$ git branch就可以看到已经切换到bug分支,当前分支前面会标一个*号
           
       7.5 对bug修改完成之后,记得提交,然后合并到master分支。
        先切换回master分支: $ git checkout master
        然后合并:$ git merge bug
        
        注意:如果旧的跟新的某一行有一样的内容,可能会发生冲突。
         $ git merge bug
         Auto-merging templates/index.html
         CONFLICT (content): Merge conflict in templates/index.html
         Automatic merge failed; fix conflicts and then commit the result.
        
         
       7.6 删除bug分支:在master分支才可以删除,在bug分支删除bug分支是不可以的
         $ git branch -d bug
         $ git branch -D bug强行删除
         
       7.7 拿回正在开发的新功能的代码:
         查看正在开发的代码放哪里了:
          $ git stash list
          stash@{0}: WIP on dev: f52c633 add merge
         拿回:
          $ git stash pop
         再次$ git stash list看不到有stash的内容了,说明已经恢复了。
       
    GitHub:
     推送分支到GitHub:
      1、登录之后,先创建仓库create repository,输入项目名d522hot和描述,点create repository。
      2、复制GitHub中的git remote add origin https://github.com/liangjingxiong/d522hot.git
       粘贴到Git中。
      3、推送master分支到GitHub:
        git push -u origin master
         完成之后,刷新页面就可以看到项目的所有文件
        注意:第一次push的时候,应该输入$ git push -u origin master
         参数-u指定origin为默认主机,后面就可以不加任何参数使用git push了
      4、推送bug分支到GitHub:
        git checkout bug先切换到bug
        git push origin bug
     
     从GitHub拉取分支到本地:
      1、电脑创建一个文件名是项目名的空文件夹:打开文件夹,右击点Git Bash Here,然后Git中输入
       git clone https://github.com/liangjingxiong/d522hot.git
        复制下来的是d522hot文件夹,输入cd d522hot进入项目里面才可以操作项目。
        地址可以在GitHub里面复制,也可以在本地电脑的.git文件夹的config中找到。
        此操作默认拿到的是master分支。
      2、拉取bug分支:
       2.1先创建bug分支:
           git branch bug
       2.2切换到bug分支:
           git checkout bug
       2.3拉取:
           git pull origin bug
           拉下来之后,此时项目代码就是bug代码
      
     注意:
      1、只有一台电脑,以bug分支为例,之前我push它到GitHub,然后继续修改它,后面我发现修改错了,想从GitHub中pull该分支回来覆盖,
       拉之前,不管有没把修改的文件添加和提交到仓库,git pull origin bug之后都提示already up to date,无法拉回来。
       解决办法:通过git reset --hard 版本号 回到以前的版本。
       如果有两台电脑,例如家里一台,公司一台,家里push然后公司pull,或者公司push家里pull,没上面的问题。
          
      2、push和pull的时候,如果打开GitHub中该项目的文件,操作就会失败。
       
      3、如果Git只有一个master分支,从GitHub拉bug分支回来(git pull origin bug),
        就会覆盖master的代码,但是还是master分支。
        
      4、rebase用法:rebase把分叉的提交历史“整理”成一条直线。
        4.1 举个例子,在公司开发1.py,下班回家前忘记push到GitHub,回家之后开发了2.py并且push到GitHub,
        第二天到公司,是无法push 1.py到GitHub的,因为1.py的时间比2.py要早并且有可能覆盖了2.py,
        所以GitHub不给push,如果push就报错:
        报错信息:
          To https://github.com/liangjingxiong/n1.git
           ! [rejected]        master -> master (fetch first)
          error: failed to push some refs to 'https://github.com/liangjingxiong/n1.git'
          hint: Updates were rejected because the remote contains work that you do
          hint: not have locally. This is usually caused by another repository pushing
          hint: to the same ref. You may want to first integrate the remote changes
          hint: (e.g., 'git pull ...') before pushing again.
          hint: See the 'Note about fast-forwards' in 'git push --help' for details.     
        这时,
        使用git fetch origin 分支,从GitHub拉取该分支放在本地仓库,因为1.py和2.py都在本地仓库,
        接着使用git rebase origin/分支 或者 git merge origin/f分支 进行合并。合并之后,使用
        git push origin dev这样就可以把1.py和2.py都push给GitHub了。
        
        4.2 当多人合作开发一个项目时,本地仓库落后于远程仓库是一个非常正常的事情,
         假设我正在使用的是本地仓库的分支是dev,做了开发或者修改,commit了给本地仓库,但是没有push到GitHub,
         而另一位开发者也是使用dev,他做了开发或者修改并且push到GitHub,那么,如果我push就会报错。
         情况跟上面例子一样。
         这时,我应该这样操作:
              1、git fetch origin dev
              2、git rebase origin/dev或git merge origin/dev
              3、git push origin dev
        
        4.3 多人协同开发的时候,合并是经常发生冲突的,项目成员必须在一起的时候才合并,方便解决冲突,
         并且合并的时间不能太长,例如一两天合并一次,或者短时间内完成了一个小功能就合并一次。
        
      5、协同开发:我跟我的小伙伴都对同一个文件进行了修改,怎样解决冲突?
       解决办法的链接:https://www.liaoxuefeng.com/wiki/896043488029600/900375748016320
       
      6、什么是代码Review?
        代码review是指在软件开发过程中,通过对源代码进行系统性检查来确认代码实现的质量保证机制
      
       如何做代码review?
        创建review分支,把几个人的代码都合并到里面,先让组长检查,检查过没问题才合并到dev分支。
        
      7、怎样在GitHub上给别人代码添加功能或者修改bug?
       7.1 fork,就可以拿到别人的代码放在自己的GitHub仓库,接着拉到本地仓库进行修改,修改完成,推送回GitHub。
       7.2 点pull request告诉别人,如果别人检查过你的代码没问题并且同意之后,就可以了。然后,这个项目还有你贡献代码的记录。
       
      8、push或pull的时候频繁要求输入用户名和密码,怎样解决?
       创建SSH私钥和公钥:
        8.1 $ ssh-keygen.exe
        8.2 接着按几次enter,在(/c/Users/86159/.ssh/id_rsa)这个地址生成了私钥id_rsa和公钥id_rsa.pub,
         打开公钥,并且复制里面的密码。
        8.3 点击GuiHub右上角小图标-->settings-->SSH and GPG keys-->粘贴到key中
        这样,拉分支的时候就使用User SSH的地址git@github.com:liangjingxiong/project524.git,
        而不是使用HTTPS,就解决了这个问题。
        
      9、创建版本(标签):
       9.1 git tag -a v1.0 -m '版本介绍'        本地创建Tag
           git push origin  --tags     推送之后,就可以给GitHub当前的分支添加版本了,
                   然后在release中可以看到。
       9.2 删除标签:
        git tag -d v1.0                     先本地删除Tag
        git push origin :refs/tags/v0.2     接着远程删除
                 
       git show v1.0                       查看
       git tags -n                         查看本地Tag
       git tag -l 'v1.4.2.*'               查看本地Tag,模糊匹配    
       git checkout v.10                   切换tag
       git fetch origin tag V1.2
       git pull origin  --tags
       
       git clone -b v1.0 git@github.com:liangjingxiong/project524.git 克隆版本
        详细点击上面链接
     

    Git其他命令:
      1、cat templates/index.html 打开templates文件夹里面的index.html
      2、ls 工作区文件或文件夹列表
      3、创建dev分支,并且切换到dev:git checkout -b dev
        相当于git branch dev 和 git checkout dev 两条命令
      4、切换:
        最新版本可以使用 git switch master 相当于 git checkout master。
        因为checkout后面跟文件或.的时候,表示撤销修改,而跟分支则表示切换,不好理解,
        所以最新版本加入了switch。
        创建+切换分支:git switch -c dev
     
  • 相关阅读:
    防止网站被镜像,被iframe
    PHP实现图片批量压缩
    常规正则表达式
    git安装项目步骤
    Laravel创建自定义 Artisan 控制台命令实例教程
    git常规命令
    JS验证身份证号
    Lucene-索引库的维护
    Lucene-分词器
    Lucene-全文检索
  • 原文地址:https://www.cnblogs.com/python-daxiong/p/12955733.html
Copyright © 2020-2023  润新知