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