git版本控制-詳細操作


  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                     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM