码迷,mamicode.com
首页 > 其他好文 > 详细

git版本控制-详细操作

时间:2017-12-29 20:03:28      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:ict   global   git clone   修改   oba   开发   冲突   git push   远程   

  1 - git,软件帮助使用者进行版本的管理
  2             
  3           阶段一git 命令:
  4                 git init  初始化
  5                
  6                 git config --global user.email "you@example.com"
  7                 git config --global user.name "Your Name"
  8 
  9                 git add .
 10                 git commit -m 描述信息
 11                 
 12                 git log  回滚,回滚之后在提交版本,就之后的不会保留在这里,保留在reflog里
 13                 git reset --hard asdfooiusdfsdfadf  # reset  复位
 14                 
 15                 git reflog  回滚后查之前的版本,在恢复  # reflog 回流
 16                 git reset --hard asdfooiusdfsdfadf
 17                 
 18                 git add .
 19                 git status 红色
 20                 git commit -m ‘‘
 21                 git status 绿色
 22                 git checkout -- filename  就是不提交退出
 23                 git status 无
 24                
 25           阶段二:
 26                 问题: 开发直播功能(一周开发完成),要紧急修复bug
 27                 线上正在运行出现bug,跟你开发的新项目没有关系,现在要修复这个bug
 28                 
 29                 解决方法一:
 30                     git stash 将当前工作区的修改过(开发)的代码暂存到某个地方中,代码恢复到之前的版本(线上bug版本),修改好后还是需要提交个版本,才能恢复
 31                     
 32                     线上代码
 33                     开发代码
 34                         git stash
 35                     线上代码bug恢复
 36                         git add .
 37                         git commit -m bug修改完成
 38                     开发代码恢复
 39                         git stash pop
 40                         - 不产生冲突
 41                         - 产生冲突,手动去解决
 42                         error: Your local changes to the following files would be overwritten by merge:
 43                     
 44                     git stash               将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态
 45                     git stash list          查看“某个地方”存储的所有记录
 46                     git stash clear         清空“某个地方”
 47                     git stash pop           将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
 48                     git stash apply  编号    将指定编号记录从“某个地方”重新拿到工作区(可能有冲突) 
 49                     git stash drop   编号    删除指定编号的记录
 50                         
 51     
 52     
 53                 解决方法二:分支
 54                     bug
 55                     master分支
 56                     dev分支
 57                     
 58                     git branch 查看分支
 59                     git branch dev 创建分支
 60                     git branch -d dev  删除分支
 61                     git checkout dev  切换分支,下面也是冲突导致
 62                     error: you need to resolve your current index first
 63                 
 64                     git merge dev   分支合并
 65                     
 66                     线上代码提交过add,commint,然后再开发的时候发现之前代码有bug
 67                     修复Bug流程:
 68                         创建开发分支,在这里开发,提交
 69                         git branch dev 创建开发分支 
 70                         git checkout dev  切换到开发分支
 71                         
 72                         # 写代码
 73                             --写开发代码
 74                             
 75                         # 在开发分支提交版本
 76                         git add .
 77                         git commit -m xxx
 78                         
 79                         git checkout master 切换到master你会发现它是线上版本,没有开发的版本
 80                         
 81                         # 创建bug分支,来修改bug,也就是线上bug
 82                         git branch bug 
 83                         git chekcout bug 
 84                         
 85                         # 修复bug 
 86                         git add .
 87                         git commit -m 紧急修复bug
 88                         
 89                         =====到此,dev里面是开发新的东西,bug里面是要修复线上的bug,master里面是线上的东西
 90                         
 91                         # 切换到master来合并bug,(注意,bug里面的修复也是需要提交)
 92                         git checkout master 
 93                         git merge bug 
 94                         
 95                         # bug修复后,就可以删掉这个分支
 96                         git branch -d bug 
 97                         
 98                         # 继续在dev里面开发,然后提交,最后合并,手动解决冲突即可
 99                         git checkout dev 
100                         
101                         # 最后需要在master上add,commit,提交最后版本
102                         
103                         
104             阶段三:三里屯和于辛庄
105                 云端需求一个存放代码的地方:
106                     公共:
107                         - github,做代码托管
108                         - 码云,做代码托管
109                         - csdn code,做代码托管
110                     内部搭建:
111                         - gitlab
112                 
113                 家里:
114                     # 开发代码,并且提交版本
115                     git add .
116                     git commit -m xx
117                     
118                     # github起别名,将代码推送到github上
119                     git remote add origin https://github.com/jokerbj/firstpro.git  给后面的这个地址起了个别名origin,remote(远程意思,远程的源)
120                     git push origin master 将当前的版本代码推送到远程的master分支上
121                     
122                     # 切换分支
123                     git branch dev
124                     git push origin dev 将开发版本代码推送到远程的dev分支上
125                     
126                 公司:新公司第一次获取代码,三种方式
127                     # 克隆获取项目 (测试目录GongSi,拉下来之后有firstpro)
128                         git clone https://github.com/jokerbj/firstpro.git 在当前目录就会有项目firstpro
129                         ls -l / cd firstpro / git status / git branch / 只会克隆下来master这个分支
130                         
131                         git branch dev 创建dev分支
132                         git checkout dev 切换至分支
133                         git pull origin dev 拉dev分支
134                         
135                     # 创建文件获取代码
136                         # 打开个文件目录,在里面创建个同项目名称的目录(GongSi,mkdir firstpro) *目录也可以不创建
137                         git init 
138                         git remote add origin https://github.com/jokerbj/firstpro.git
139                         git pull origin master 
140                         
141                         git branch dev 创建dev分支
142                         git checkout dev 切换至分支
143                         git pull origin dev 拉dev分支
144                         
145                     # 创建文件获取代码,不需要在文件目录里面创建项目目录
146                         git init 
147                         git remote add origin https://github.com/jokerbj/firstpro.git
148                         git fetch origin master  完毕后,ls并没有内容,拉到了工作区,也就是分支区,所以就需要合并
149                         git merge origin/master  合并,跟网上下载下来的分支合并
150                         
151                         git fetch origin dev 拉到了工作区,也就是分支dev区,所以就需要合并
152                         git branch dev 创建dev分支
153                         git checkout dev 切换至分支
154                         git merge origin/dev 拉dev分支
155                     
156                     # 第一次以后,就不需要上面克隆,或者添加源文件
157                         git pull origin master 
158                         git push origin master 
159                         git fetch origin master 
160                         git merge origin/master 
161                         
162                     # 本地冲突演示,更改本地s1文件(未提交),然后在github上更改s1文件
163                         需要在dev分支操作
164                         git pull origin dev    # Please add your changes or stash them before you merge.
165                             git status 查看状态,还在工作区,需要 git add .
166                         git pull origin dev    # Please commit your changes or stash them before you merge.
167                             git status 查看状态,拿过来等待提交,需要 commit
168                         git commit -m xxx 提示冲突
169                             ‘‘‘
170                             Auto-merging s1.py
171                             CONFLICT (content): Merge conflict in s1.py
172                             Automatic merge failed; fix conflicts and then commit the result
173                             ‘‘‘
174                     # 手动解决冲突,线上的内容应该会在本地内容的下面
175                         将>>> head 删除,然后提交,将会覆盖,在拉下来        
176 
177                     
178 # 真实场景
179     家里。公司
180     分支dev 里面都是一样内容
181     
182     家里 在s1文件里面写点东西
183         vi s1.py
184         git add .
185         git commit -m xxx
186         git push origin dev
187         
188     公司 下拉代码
189         git pull origin dev
190     
191     ** 到公司了,写了代码,只做了add,commit但是忘记了push ?
192     
193     家里 到了家里,发现在公司写的代码忘记了push?
194     没有关系,继续开发新的代码,然后add,commit,push。
195     
196     公司 到了公司,不能push,因为公司代码晚,家里代码新,git不允许这么做,所以是pull拉家里代码。
197     解决冲突,继续开发代码,然后add, commit, push
198     
199     家里 到了家里,pull公司代码
200     
201     
202 # 协同开发
203 
204     阶段三:
205         master 
206         
207         dev 
208             review  开发老大没问题,代码合并到dev
209             bb  开发者  代码合并到review
210             sk  开发者  代码合并到review
211             wh  开发者  代码合并到review
212         
213         协同开发:
214             - 项目协作者,github 找到项目firstpro -- settings -- Collaborators
215             - 组织协同,github + new organization -- people邀请成员 -- settings设置权限
216             
217             PS: 创建组织
218             
219     真实案例协同开发:
220      ----
221         第一个人
222         git pull,最后在创建自己的开发目录bb
223         git clone https://github.com/jokerbj/firstpro
224         cd firstpro
225         git branch dev
226         git checkout dev
227         git pull origin dev  下拉github上dev代码
228         
229         git branch review   创建reivew分支,用于提交测试
230         add,commit
231         git push origin review   将reivew分支提交上去
232         
233         git checkout master 切到master分支,将代码同步到到自己开发分支目录
234         git branch bb  创建自己开发分支,保证代码与第二个人一样,也用review
235         git checkout bb  切换到自己分支
236         
237      ----
238         第二个人
239         git clone https://github.com/jokerbj/firstpro
240         cd firstpro
241         
242         git branch dev 线上开发目录
243         git pull origin dev 拉线上dev代码
244         git branch review  老大审计目录
245         git pull origin review 拉线上老大目录
246         
247         git branch sk  自己开发目录
248         git checkout sk 切换到自己分支
249         git pull origin review 将线上review审计的代码下拉到自己开发分支
250         
251      ----
252         各自在自己的分支目录创建开发文件
253         git add .
254         git commit -m 第一次提交
255         git push origin bb/sk
256         
257         各自在自己的分支目录开发文件中写入文件
258         git add .
259         git commit -m 小功能开发完毕
260         git push origin bb/sk
261         
262      ----
263          合并,切到review分支,拉下review代码,看看是不是有新的,没有,将自己的review与自己的开发目录 
264         
265         第一个人
266         git checkout review
267         git pull origin review
268         git merge bb
269         
270         git status 是否干净
271         git push origin review 提交第一个的代码
272         
273         第二个人同第一个人
274         git checkout review
275         git pull origin review
276         git merge sk
277         
278         git status 是否干净
279         git push origin review 提交第一个的代码
280         
281         第一个人注意,还要再拉一次才能保持最新
282         
283         给老大看分支,老大说可以,就要放到dev分支,再没问题放到线上master,或者放到预发布分支
284         
285         面试题:公司代码review怎么做?谁来做?review分支,开发小功能合并,给小组长看,小组长也开发代码,开发核心代码.(固定时间,一起来做review)
286         面试题:怎么做协程开发的?每个人都有自己分支,小功能开发固定时间提交到review,在提交到dev,最后master
287         
288     阶段四:
289         fork,人家代码,自己fork就是将代码在自己项目里面拷贝了一份,你可以贡献代码。
290         
291         面试题: 如何给别人的源码贡献代码,就是通过fork一下拷贝到自己这里,new pull request,create pull request,对面接受就是贡献(合并)
292         
293         
294     注意事项:
295         add . 这里面有隐藏文件(.pyc),pycharm notepadd++ 客户端不一样,不要把所有的代码提交,尤其是个人文件,自己ide文件,显得不专业
296         手动 不要加文件
297         自动
298         - .gitignore 文件
299             在当前git init下,直接vim .gitignore,里面写入不想提交的文件名字,.idea/ *.py .py[cod] 支持正则
300         
301         - 认证,在之前的github不支持记住密码的,所以用的是用户凭证,在项目克隆那里可以看到
302             SSH:(ssh协议)
303                 在git init目录下
304                 ssh-keygen 三下回车,cd ~ 进入登陆用的家目录,cd .ssh/,cat id_rsa.pub ,复制到github上面,settings ssh andd gpg keys,new ssh key,复制过来 起个名字
305                 git remote add origin  git@github.com:ugfly1210/git_projects.git
306                 
307                 
308             Https:(http协议)
309                 https://github.com/ugfly1210/git_projects.git
310                 
311                 
312                 
313 rebase
314     忘记push解决方法
315     之前解决方式,忘记push-----,用于查图的时候分支太多不好看
316     首先 在家里
317         git init 
318         git remote add origin https://github.com/jokerbj/firstpro
319         touch a.py -- vim a.py
320         git add .
321         git commit -m 在家里
322         git push origin master
323         
324     然后 在公司
325         git clone https://github.com/jokerbj/firstpro
326         进入firstpro目录
327         vi a.py
328         git add .
329         git commit -m 在公司开发碰到美女
330         *** 忘记上传
331         
332     然后 在家里
333         vim a.py
334         git add .
335         git commit -m 凌晨三点开发
336         git push origin master
337         
338     然后 在公司
339         git fetch origin master 
340         git merge origin/master
341         这样拉代码的时候就会产生冲突,手动解决冲突
342         git add .
343         git commit -m xxx
344         git push origin master
345         
346         
347     rebase 解决方法,其实就是在合并的时候不用merge,而是使用rebash
348     合并解决方法,也是忘记push-----,查图的时候分支一条线
349         git fetch origin master 
350         git rebase origin/master
351         冲突,手动解决冲突
352         vim a.py
353         git status 查看一下状态,冲突解决完了,让咱们add一下
354         git add .  表示解决完冲突
355         git status 让我执行,git rebase --continue
356         git rebash --continue 这个表示合并完了,如果不执行这个,就会返回工作区
357         git push origin master
358         git status
359     
360         
361     合并的三种方法    
362         git pull origin master  (公司常用)
363         
364         git fetch origin master 
365         git merge origin/master 
366     
367         git fetch origin master 
368         git rebase origin/master 
369         
370         git add .
371         git rebase --continue
372     
373         
374                     

 

git版本控制-详细操作

标签:ict   global   git clone   修改   oba   开发   冲突   git push   远程   

原文地址:https://www.cnblogs.com/jokerbj/p/8146033.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!