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
 
原文地址:https://www.cnblogs.com/python-daxiong/p/12955733.html