zoukankan      html  css  js  c++  java
  • day 102 GIT 的使用方法.

    https://www.cnblogs.com/wupeiqi/articles/7295372.html

     

    文件名为红色表示 此文件在工作区被修改的状态 ,需要通过git add .进行提交,提交到版本库里 .

    文件名为绿色表示 此文件已经被 add了,目前已经放到了版本库暂存状态, 需要通过commit命令提交.

    目前已使用Git的四个命令,这四个命令已经可以代替本地多个文件保存版本的方式:

    • git init,初始化,表示即将对当前文件夹进行版本控制。
    • git status,查看Git当前状态,如:那些文件被修改过、那些文件还未提交到版本库等。
    • git add 文件名,将指定文件添加到版本库的暂存状态。
    • git commit -m '提交信息',将暂存区的文件提交到版本库的分支。
    • git log,查看提交记录,即:历史版本记录

    一、返回到之前的版本

    1. 先查看当下的log 

    $ git log
    commit f20f8b10e2eb3fbbefd3dab65ee6c5fe7f773f0b (HEAD -> master)
    Author: 孟宾 <mengbin0546@126.com>
    Date:   Sun Oct 7 10:53:26 2018 +0800
    
        第二个版本
    
    commit e835b58b8cb147261418a9299a0d85b2d80fcc01
    Author: 孟宾 <mengbin0546@126.com>
    Date:   Sun Oct 7 10:44:32 2018 +0800
    
        第一次提交
    
    ipc@Hello MINGW64 ~/Downloads/bootstrap-3.3.7-dist (master)
    

      

    2. 回退到"第一次提交"的版本.

    $ git reset --hard e835b58b8cb147261418a9299a0d85b2d80fcc01
    HEAD is now at e835b58 第一次提交
    

      

    3. 如果还想回退到 第二次 提交的版本怎么办.

     先查看回退的版本

    $ git reflog
    e835b58 (HEAD -> master) HEAD@{0}: reset: moving to e835b58b8cb147261418a9299a0d85b2d80fcc01
    f20f8b1 HEAD@{1}: commit: 第二个版本
    e835b58 (HEAD -> master) HEAD@{2}: commit (initial): 第一次提交

    在进行回退

    $ git reset --hard f20f8b1
    HEAD is now at f20f8b1 第二个版本

    二、git stash(没看懂)

    stash用于将工作区发生变化的所有文件获取临时存储在“某个地方”,将工作区还原当前版本未操作前的状态;stash还可以将临时存储在“某个地方”的文件再次拿回到工作区。

    1. 先将更改放到暂存区  git add . 

    2. 然后进行 git stash

    $ git stash
    Saved working directory and index state WIP on master: f20f8b1 第二个版本

    三、branch

     

    MacBook-Pro-4:pondo wupeiqi$ git branch dev                 # 创建新分支,即:拷贝一份当前所在分支代码到新分支
    MacBook-Pro-4:pondo wupeiqi$ git checkout dev               # 切换到dev分支
    MacBook-Pro-4:pondo wupeiqi$ vim app01/views.py             # 开发功能
    MacBook-Pro-4:pondo wupeiqi$ git status                     # 查看状态,即:在dev分支修改了app01/views.py文件
    On branch dev
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
        modified:   app01/views.py
    
    no changes added to commit (use "git add" and/or "git commit -a")
    MacBook-Pro-4:pondo wupeiqi$ git add .                      # 将修改文件添加到版本库的暂存区
    MacBook-Pro-4:pondo wupeiqi$ git commit -m '新功能开发完毕'    # 将暂存区的内容提交到当前所在分支,即:dev分支
    [dev 32b40cd] 新功能开发完毕
    file changed, 2 insertions(+) 
    MacBook-Pro-4:pondo wupeiqi$ git checkout master             # 切换回master分支 
    Switched to branch 'master'
    MacBook-Pro-4:pondo wupeiqi$ git merge dev                   # 将dev分支内容合并到master分支
    Updating 0972f4b..32b40cd
    Fast-forward
     app01/views.py | 2 ++
    file changed, 2 insertions(+)
    
    一般流程示例(上图)

     

    MacBook-Pro-4:pondo wupeiqi$ git branch                     # 当前在master分支
    * master
     
     
    MacBook-Pro-4:pondo wupeiqi$ git branch dev                 # 创建dev分支用于开发新功能
     
    MacBook-Pro-4:pondo wupeiqi$ git checkout dev               # 切换到dev分支
    Switched to branch 'dev'
     
    MacBook-Pro-4:pondo wupeiqi$ vim app01/views.py             # 开发新功能到一半,需要紧急修复Bug
     
    MacBook-Pro-4:pondo wupeiqi$ git add .
     
    MacBook-Pro-4:pondo wupeiqi$ git commit -m '新功能开发一半'
    [dev b3ac2cb] 新功能开发一半
     1 file changed, 2 insertions(+)
     
     
     
     
    MacBook-Pro-4:pondo wupeiqi$ git checkout master            # 切换回master分支
    Switched to branch 'master'
     
    MacBook-Pro-4:pondo wupeiqi$ git branch bug                 # 创建bug分支
     
    MacBook-Pro-4:pondo wupeiqi$ git checkout bug               # 切换到bug分支
    Switched to branch 'bug'
     
    MacBook-Pro-4:pondo wupeiqi$ vim pondo/settings.py          # 修改bug
     
    MacBook-Pro-4:pondo wupeiqi$ git add .                      # 提交bug
     
    MacBook-Pro-4:pondo wupeiqi$ git commit -m '紧急修复bug'      # 提交bug
    [bug f42f386] 紧急修复bug
     1 file changed, 1 insertion(+), 1 deletion(-)
     
     
    MacBook-Pro-4:pondo wupeiqi$ git checkout master            # 切换会master
    Switched to branch 'master'
     
    MacBook-Pro-4:pondo wupeiqi$ git merge bug                  # 将bug分支内容合并到master分支,表示bug修复完毕,可以上线
    Updating 0972f4b..f42f386
    Fast-forward
     pondo/settings.py | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
     
     
     
     
    MacBook-Pro-4:pondo wupeiqi$ git checkout dev               # 切换到dev分支,继续开发新功能
    Switched to branch 'dev'
     
    MacBook-Pro-4:pondo wupeiqi$ vim app01/views.py             # 继续开发其他一半功能
     
    MacBook-Pro-4:pondo wupeiqi$ git add .                      # 提交新功能
     
    MacBook-Pro-4:pondo wupeiqi$ git commit -m '继续开发完成'      # 提交功能
    [dev c0bfb27] 继续开发完成
     1 file changed, 1 insertion(+)
     
    MacBook-Pro-4:pondo wupeiqi$ git checkout master            # 切换回master分支
    Switched to branch 'master'
     
    MacBook-Pro-4:pondo wupeiqi$ git merge dev                  # 将dev分支合并到master分支
    Merge made by the 'recursive' strategy.
     app01/views.py | 3 +++
     1 file changed, 3 insertions(+)
    

      

    注意:git merge 时也可能会出现冲突,解决冲突的方式上述stash相同,即:找到冲突文件,手动修改冲突并提交,此处不再敖述。

    branch相关常用命令:

    • git branch 分支名称             创建分支
    • git checkout 分支名称          切换分支
    • git branch -m 分支名称        创建并切换到指定分支
    • git branch                          查看所有分支
    • git branch -d 分支名称         删除分支
    • git merge 分支名称              将指定分支合并到当前分支

    四、github

    git可以是用该URL进行向远程推送版本信息或获取版本信息

     工作上传到Github上代码.(在家里)

    MacBook-Pro-4:pondo wupeiqi$ git remote add origin https://github.com/WuPeiqi/pondo.git   # 为地址起一个别名origin
    MacBook-Pro-4:pondo wupeiqi$ git push origin master              # 将本地master分支内容以及版本信息推送到GitHub
    Username for 'https://github.com':                               # 输入GitHub用户名
    Password for 'https://wupeiqi@github.com':                       # 输入GitHub密码
    Counting objects: 2, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (2/2), 270 bytes | 0 bytes/s, done.
    Total 2 (delta 1), reused 0 (delta 0)
    remote: Resolving deltas: 100% (1/1), completed with 1 local object.
    To https://github.com/WuPeiqi/pondo.git
       634aac4..274f1e4  master -> master
    MacBook-Pro-4:pondo wupeiqi$ git push origin dev              # 将本地dev分支内容以及版本信息推送到GitHub
    Counting objects: 3, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (3/3), 261 bytes | 0 bytes/s, done.
    Total 3 (delta 1), reused 0 (delta 0)
    remote: Resolving deltas: 100% (1/1), completed with 1 local object.
    To https://github.com/WuPeiqi/pondo.git
       274f1e4..50e2169  dev -> dev

     把github上的代码下载下来.(在公司里)

    MacBook-Pro-4:github wupeiqi$ git clone https://github.com/WuPeiqi/pondo.git    # 将项目从GitHub中获取
    Cloning into 'pondo'...
    remote: Counting objects: 31, done.
    remote: Compressing objects: 100% (26/26), done.
    remote: Total 31 (delta 2), reused 30 (delta 1), pack-reused 0
    Unpacking objects: 100% (31/31), done.
    MacBook-Pro-4:github wupeiqi$ cd pondo/
    MacBook-Pro-4:pondo wupeiqi$ git Branch                                          # 默认获取到得只有master分支
    * master
    MacBook-Pro-4:pondo wupeiqi$ git branch dev origin/dev                           # 创建dev分支且和远程dev分支同步
    Branch dev set up to track remote branch dev from origin.
    MacBook-Pro-4:pondo wupeiqi$ git checkout dev                                    # 切换到dev分支
    Switched to branch 'dev'
     
    MacBook-Pro-4:pondo wupeiqi$ vim app01/views.py                                  # 继续开发新功能
     
    MacBook-Pro-4:pondo wupeiqi$ git add .                                           # 添加文件到版本库的暂存状态
    MacBook-Pro-4:pondo wupeiqi$ git commit -m '公司开发功能1'                         # 提交新功能到版本库的分支
    [dev 9281447] 公司开发功能1
     1 file changed, 1 insertion(+), 1 deletion(-)
    MacBook-Pro-4:pondo wupeiqi$ git push origin dev                                 # 提交dev分支内容到远程GitHub托管仓库的dev分支
    Username for 'https://github.com': wupeiqi
    Password for 'https://wupeiqi@github.com':
    Counting objects: 4, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (4/4), done.
    Writing objects: 100% (4/4), 427 bytes | 0 bytes/s, done.
    Total 4 (delta 2), reused 0 (delta 0)
    remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
    To https://github.com/WuPeiqi/pondo.git
       50e2169..9281447  dev -> dev

    到家继续下载干活

    MacBook-Pro-4:pondo wupeiqi$ git checkout dev                                   # 切换到dev分支
    Already on 'dev'
    MacBook-Pro-4:pondo wupeiqi$ git pull origin dev                                # 从远程GitHub仓库获取dev分支最新内容,并合并到本地
    remote: Counting objects: 4, done.
    remote: Compressing objects: 100% (2/2), done.
    remote: Total 4 (delta 2), reused 4 (delta 2), pack-reused 0
    Unpacking objects: 100% (4/4), done.
    From https://github.com/WuPeiqi/pondo
     * branch            dev        -> FETCH_HEAD
       50e2169..9281447  dev        -> origin/dev
    Updating 50e2169..9281447
    Fast-forward
     app01/views.py | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
     MacBook-Pro-4:pondo wupeiqi$ vim app01/views.py                                # 继续开发新功能
     MacBook-Pro-4:pondo wupeiqi$ git add .                                         # 添加文件到版本库的暂存状态
    MacBook-Pro-4:pondo wupeiqi$ git commit -m '家里开发功能1'                        # 提交新功能到版本库的分支

    到了公司,昨天晚上开发的功能 ,今天继续干活.

    MacBook-Pro-4:pondo wupeiqi$ git checkout dev                                   # 切换到dev分支
    MacBook-Pro-4:pondo wupeiqi$ git fetch origin dev                               # 从GitHub仓库获取dev分支最新内容到版本库的分支
    remote: Counting objects: 3, done.
    remote: Compressing objects: 100% (1/1), done.
    remote: Total 3 (delta 1), reused 3 (delta 1), pack-reused 0
    Unpacking objects: 100% (3/3), done.
    From https://github.com/WuPeiqi/pondo
     * branch            dev        -> FETCH_HEAD
       150d891..65b6604  dev        -> origin/dev
    MacBook-Pro-4:pondo wupeiqi$ git merge origin/dev                               # 将版本库的分支内容合并到工作区
    Updating 150d891..65b6604
    Fast-forward
     readme | 5 ++++-
     1 file changed, 4 insertions(+), 1 deletion(-)
    MacBook-Pro-4:pondo wupeiqi$ vim app01/views.py                                 # 继续开发新功能
    MacBook-Pro-4:pondo wupeiqi$ git add .                                          # 添加文件到版本库的暂存状态
    MacBook-Pro-4:pondo wupeiqi$ git commit -m 'xxxxxxxxxxx'                        # 提交新功能到版本库的分

    长此以往,将Git和GitHub结合使用做到避免电脑损坏造成数据丢失以及多地开发的问题,上文执行过程中执行 【git pull origin 分支】命令等同于【git fetch origin 分支】+ 【git merge origin/分支】,并且在执行过程中可能会出现冲突,原因是由于本地代码和获取的最新代码有重合部分,那么就需要自己手动解决冲突然后再继续开发。

    Git使用之小P创业成熟期

    平台需要三人协同开发,GitHub中多人协同开发和单人开发还是有点差别,协同开发一般有两种方式:

     合作者,将其他用户添加到仓库合作者中之后,该用户就具有向当前仓库提交代码。

    组织,创建一个组织,然后再该组织下可以创建多个项目,组内成员可以向组内所有项目提交代码。PS:也可以对某个项目指定合作者

     

    协同开发命令和以上步骤类似,此处就不再重新写代码,而是使用文件描述三人协同开发整个过程。

    • 创建程序
      • 用户A创建程序,提交到GitHub
      • 用户B克隆项目
      • 用户C克隆项目
    • 开发功能
      • 用户A开发功能1
      • 用户B开发功能2
      • 用户C开发功能3
    • 提交
      • 用户A提交功能1,并push(A用户手速快,先提交。)
      • 用户B提交功能2,无法push,因为GitHub上已经有其他人提交的新代码。
        解决方法:从GitHub上获取最新代码并合并到本地,提交自己开发的功能2。
      • 用户C提交功能3,无法push,无法提交,因为GitHub上已经有其他人提交的新代码。
        解决方法:从GitHub上获取最新代码并合并到本地,提交自己开发的功能3。
    • 获取最新代码
      • 用户A获取最新代码
      • 用户B获取最新代码
      • 用户C获取最新代码

    在上面红色标注的解决方法位置可以有三种方式操作,三者都可以完成合并并提交新功能,但是日志记录会有差异,如:前两者版本记录中会出现合并,而第三种可以保证版本记录干净整洁。

      • 先 git pull origin master   然后 git push origin master
      • 先 git fetch origin master 然后 git merge origin/master   再 git push origin master

     

     

     

     

     

     

    创建上传项目

    创建成一个github项目

    	模拟情况:
    				创建代码仓库:https://github.com/ayuchao/bjhot.git
    			
    				家里:
    					git remote add origin https://用户名:密码@github.com/ayuchao/bjhot.git
    					
    					git push origin dev 
    					git push origin master 
    

      

    下载一个项目

     

    	
    				公司:
    					git clone https://用户名:密码@github.com/ayuchao/bjhot.git
    					git branch dev 
    					git checkout dev 
    					git pull origin dev 
    					
    					写代码
    					git add .
    					git commit -m 'xxx'
    					git push origin dev 
    					
    				家里:
    					git pull origin dev 
    					写代码
    					git add .
    					git commit -m 'xxx'
    					git push origin dev 
    				公司:
    					git pull origin dev 
    					写代码
    					git add .
    					git commit -m 'xxx'
    					git push origin dev 
    

      

    s11day83 git
    
    内容回顾:
    	1. django请求生命周期?
    	
    	2. wsgi
    		web服务网关接口,一套协议。
    		实现wsgi协议的模块:
    			wsgiref
    			uwsgi
    			werkzreg
    	3. 路由系统
    		/index/    		 index  
    		/index/(d+)     index  
    		/index/(d+)     index   name='i1'
    		
    	4. 视图 
    		FBV,function Base View
    		CBV,class base view
    		
    	5. orm(会)
    		create
    		delete 
    		update
    		filter/all 
    		exclude
    		values
    		values_list 
    		get 
    		first
    		last
    		order_by
    		only 
    		defer 
    		补充:
    			# queryset = [obj,obj,obj]
    			user_list = models.User.objects.all() # select id,name,pwd from user;
    			for item in user_list:
    				item.id
    				item.name 
    
    			# queryset = [obj,obj,obj]
    			user_list = models.User.objects.all().only('id','name') # select id,name from user;
    			for item in user_list:
    				item.id
    				item.name 
    				item.pwd  
    				
    			# queryset = [obj,obj,obj]
    			user_list = models.User.objects.all().defer('pwd') # select id,name from user;
    			for item in user_list:
    				item.id
    				item.name 
    				
    				
    				
    			# queryset = [{id:1,name:'xx'},obj,obj]
    			user_list = models.User.objects.all().values('id','name')
    			for item in user_list:
    				item['id']
    				item['name']
    	6. 模板 
    		
    今日内容:git
    	
    	1. 版本管理工具
    		- git 
    		- svn 
    		
    		https://git-scm.com/downloads
    
    	2. 大表哥创业故事:北京热
    	
    		a. 初次创建版本 
    			git init 
    			git config --global user.email "you@example.com"
    			git config --global user.name "Your Name"
    
    			
    			git status 
    			git add . 
    			git commit -m "初次提交" 
    		b. 版本迭代
    			git log 
    			git reflog
    			
    			git reset --hard 版本ID 
    		
    		c. 开发新功能:附近的人
    			
    			git stash           将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态
    			git stash list      查看“某个地方”存储的所有记录
    			git stash clear     清空“某个地方”
    			git stash pop       将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
    			git stash apply     编号, 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突) 
    			git stash drop      编号,删除指定编号的记录
    			
    			用于个人开发
    
    		d. 分支
    			git branch 查看所有分支
    			git branch  dev  创建分支
    			git checkout dev 切换到分支
    			git branch -d dev 删除分支
    			
    			git merge dev 合并分支
    			
    			从此以后:
    				- master 
    				- dev 
    				
    			问题:你们在公司如果遇到要紧急修复的bug,怎么解决?
    				  在master分支上创建一个debug分支,在debug分支上进行修复,修复完毕后再合并到master并删除debug分支;
    				  再次切换会dev分支,进行开发....
    
    		e. 代码仓库,
    			个人:
    				- github 
    				- 码云
    			公司:
    				- gitlab 
    			
    			模拟情况:
    				创建代码仓库:https://github.com/ayuchao/bjhot.git
    			
    				家里:
    					git remote add origin https://用户名:密码@github.com/ayuchao/bjhot.git
    					
    					git push origin dev 
    					git push origin master 
    					
    				公司:
    					git clone https://用户名:密码@github.com/ayuchao/bjhot.git
    					git branch dev 
    					git checkout dev 
    					git pull origin dev 
    					
    					写代码
    					git add .
    					git commit -m 'xxx'
    					git push origin dev 
    					
    				家里:
    					git pull origin dev 
    					写代码
    					git add .
    					git commit -m 'xxx'
    					git push origin dev 
    				公司:
    					git pull origin dev 
    					写代码
    					git add .
    					git commit -m 'xxx'
    					git push origin dev 
    					
    				
    					
    总结:
    	git做版本管理:本地
    	github是代码托管仓库:远程
    	
    	
    	1. 请书写你了解的git命令?
    		准备:
    			git init 
    			git config --global user.email "you@example.com"
    			git config --global user.name "Your Name"
    			git remote add origin https://github.com/ayuchao/bjhot.git
    			git remote add origin https://用户名:密码@github.com/ayuchao/bjhot.git
    		
    		提交:
    			git add . 
    			git commit -m 'xxxxx'
    			git push origin dev 
    			
    		下载:
    			git clone https://github.com/ayuchao/bjhot.git
    			
    			等价于:
    				1. 手动创建文件夹bjhot
    				2. 进入文件夹
    				3. git init 
    				4. git remote add origin https://用户名:密码@github.com/ayuchao/bjhot.git
    				5. git pull origin master 
    			
    			git pull origin master 
    		
    		合并:
    			git merge 
    			
    		日志回滚:
    			git log 
    			git reflog 
    			git reset --hard asdfasdfasdfadsfasdfasdf
    			
    		暂存:
    			git stash 
    			git stash pop 
    			
    作业:
    	1. 本地提交+回滚
    	
    	2. 通过分支来模拟:出现bug之后如何解决?
    		master
    		dev 
    		
    	3. 将代码托管到github上
    		
    	4. 以后:将个人代码非敏感信息上传到github上。
    			
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    			
    			
    			
    	
    	
    		
    		
    		
    		
    		
    		
    		
    		
    		
    		
    		
    		
    		
    		
    		
    		
    		
    		
    		
    		
    		
    		
    		
    		
    		
    

      

  • 相关阅读:
    几种简单的博弈 1
    Luogu P2789 直线交点数
    搜索题简记
    并查集的妙用
    [qbzt寒假]线段树和树状数组
    [qbzt寒假]hash
    [qbzt寒假]Trie字典树
    博客阅读须知
    洛谷P1842 [USACO05NOV]奶牛玩杂技——题解
    2020SDOI游记
  • 原文地址:https://www.cnblogs.com/mengbin0546/p/9259267.html
Copyright © 2011-2022 走看看