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