git 命令和使用場景總結

資料地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000html

       http://www.cnblogs.com/wupeiqi/p/7295372.htmllinux

1、git的起源 ?git

  git是Linux的創始人Linus爲了管理linux的版本而花了兩個星期寫的。以前用過一段時間BitKeeper這個軟件,github

  後來鬧出矛盾了,一個道歉就能夠解決的事,做爲一個特立獨行的大牛,Linus索性本身搞。django

  因此以後才能出現git和基於git的全球最大同性交友網站github。vim

  大牛任性改變歷史,普通人任性只能改變本身。windows

2、git的做用?服務器

  從起源能夠看出來,能夠用做版本管理,特別是多人協做的狀況下,在當今集團軍做戰的時代,git已經成爲必不可少的分佈式版本控制工具。app

3、 git的安裝?運維

  沒有特殊的

  windows 官網下載

  Linux yum install git

  

4、git 命令大全

5、 git 原理 

   git 把當前文件夾在生成一個 .git 文件夾用做版本控制庫,這個文件夾之後可能會很大,由於全部代碼都存放在裏面。

  分爲隔離的四個區,經過不一樣命令實現內容改變,換句話說你作的全部改變的代碼,都被做爲素材提交到庫中。

  當咱們須要回到哪一個時刻,就把素材按照當時順序組織,因此在內存角度沒變多少,因此版本更替很快。

  HEAD,一個指針,表明當前處理的版本

  master,主分支,表明咱們主要的版本

  dev,測試分支,表明咱們公司開發版本

  xxx,本身名字,表明本身負責工做分支

  平時master穩定運行,本身作完把本身分支向dev分支上merge,公司安排測試等測試dev版本,ok了運維部門安裝到服務器,也就是上線。

 

 

 

 

 

分支合併簡單狀況,修改-----保存

分支合併衝突狀況,解決衝突。先後衝突的文件中,衝突的內容二者都會顯示,須要人工手動選擇一個,修改完畢,再提交。

 

 

 

 

6、使用場景總結:

 

本地開始

$ pwd                   # 顯示當前目錄
$ git init                # git初始化
$ git status                        # 查看當前git狀態
$ git add .                         # 添加當前目錄下全部文件到版本庫
$ git commit -m '第一次提交'          # 提交到版本庫,並填寫版本說明,以便之後回滾。
$ ls                                # 查看目錄下文件
$ touch a.py                        # 建立新文件
$ git log                           # 查看歷史版本提交記錄(根據版本commit值能夠進行回滾)
$ git reset --hard 版本號            # 工做區向歷史滾
$ git reflog                        # 查看回滾記錄
$ git reset --hard 0972f4b          # 工做區向將來滾
$ git checkout -- file # 撤回工做區修改,讓這個文件回到最近一次或時的狀態。這兩個點至關於單機遊戲中的存檔點,執行就保存一次狀態
$ git reset HEAD file # 撤回提交到暫存區的修改,工做區未退回,
$ git rm file # 刪除文件,須要commit
$ git commit
$ git tag # 查看全部標籤
$ git show tagename # 查看便籤詳細
$ git tag -a tagname -m message commit_id # 給commit建立標籤,方便之後查看,默認是打在HEAD上
$ git tag -d tagname # 刪除本地便籤
$ git push origin tagname # 推送標籤到遠程庫,便籤不推不會到遠程庫
$ git push origin --tags # 推送所有標籤
git addgit commit

新功能開發方案

$ git branch dev                           # 建立新分支,即:拷貝一份當前所在分支代碼到新分支
$ git checkout dev                         # 切換到dev分支
$ vim app01/views.py                       # 開發功能
$ git status                               # 查看狀態,即:在dev分支修改了app01/views.py文件
$ git add .                                # 將修改文件添加到版本庫的暫存區
$ git commit -m '新功能開發完畢'             # 將暫存區的內容提交到當前所在分支,即:dev分支
$ git checkout master                      # 切換回master分支 
$ git merge dev                            # 將dev分支內容合併到master分支


$ git branch -d dev # 新功能沒完成,老闆說不要了
$ git branch -D dev # 還沒提交就不要了,強制刪除

 


新功能開發中去修復bug之stash方案

$ vim app01/views.py                               # 開發直播功能,剛開發到一半 ,不想提交
$ git status
$ git stash                                        # 將開發到一半的直播功能,臨時存儲到「某個地方」
$ git status                                       # 工做區回到當前版本未作任何操做前
$ vim pondo/settings.py                            # 緊急修復bug
$ git add .                                        # 添加到修改bug的代碼到暫存狀態
$ git commit -m '緊急修復bug'                       # 提交修復Bug的代碼到分支
$ git stash pop                                    # 將開發到一半的直播功能從「某個地方」再次拿會工做區繼續開發

stash 命令
  git stash 將當前工做區全部修改過的內容存儲到「某個地方」,將工做區還原到當前版本未修改過的狀態
  git stash list 查看「某個地方」存儲的全部記錄
  git stash clear 清空「某個地方」
  git stash pop 將第一個記錄從「某個地方」從新拿到工做區(可能有衝突)
  git stash apply 編號, 將指定編號記錄從「某個地方」從新拿到工做區(可能有衝突) 
  git stash drop 編號,刪除指定編號的記錄

例子
a. 原來內容:
  from django.shortcuts import render,HttpResponse

  def index(request):
    return render(request,'index.html')

  def africa(request):
    return HttpResponse('非洲專區')


b. 在a基礎上開發到一半直播功能:
  from django.shortcuts import render,HttpResponse

  def index(request):
    return render(request,'index.html')

  def africa(request):
    return HttpResponse('非洲專區')


  def live(request):
    print('開發到一半')
    return HttpResponse('....')


c. 執行git stash,回到當前版本未修改狀態a:
  from django.shortcuts import render,HttpResponse

    def index(request):
      return render(request,'index.html')

    def africa(request):
      return HttpResponse('非洲專區')

d. 修復Bug並提交:
  from django.shortcuts import render,HttpResponse

    def index(request):
      return render(request,'index.html')

    def africa(request):
      return HttpResponse('非洲xxxxx專區')


e. 繼續開發直播功能 git stash pop,此時會出現衝突:

  $ git stash pop
  表示app01/views.py存在衝突須要解決,此時文件內容爲:

  from django.shortcuts import render,HttpResponse

    def index(request):
      return render(request,'index.html')

    def africa(request):
    <<<<<<< Updated upstream:                # 修復Bug時更改的內容
      return HttpResponse('非洲xxxx區') 
    =======                                   # 修復Bug前正在開發新功能時的內容
      return HttpResponse('非洲專區')

    def live(request):
      print('剛開發到一半')
      return HttpResponse('直播功能')
    >>>>>>> Stashed changes


須要自行解決衝突,而後繼續開發,如:

    from django.shortcuts import render,HttpResponse

      def index(request):
        return render(request,'index.html')

      def africa(request):

        return HttpResponse('非洲xxxx區') 

      def live(request):
        print('剛開發到一半')
        return HttpResponse('直播功能')

 

新功能開發中去修復bug之修補bug分支方案

$ git branch                             # 當前在master分支
$ git branch dev                         # 建立dev分支用於開發新功能
$ git checkout dev                       # 切換到dev分支
$ vim app01/views.py                     # 開發新功能到一半,須要緊急修復Bug
$ git add .
$ git commit -m '新功能開發一半'
$ git checkout master                    # 切換回master分支
$ git branch bug                         # 建立修復bug分支
$ git checkout bug                       # 切換到bug分支
$ vim pondo/settings.py                  # 修改bug
$ git add .                              # 提交bug
$ git commit -m '緊急修復bug'             # 提交bug
$ git checkout master                    # 切換回master
$ git merge bug                          # 將bug分支內容合併到master分支,表示bug修復完畢,能夠上線
$ git checkout dev                       # 切換到dev分支,繼續開發新功能
$ vim app01/views.py                     # 繼續開發其餘一半功能
$ git add .                              # 提交新功能
$ git commit -m '繼續開發完成'             # 提交功能
$ git checkout master                    # 切換回master分支
$ git merge dev                          # 將dev分支合併到master分支


branch相關經常使用命令:
  git branch 分支名稱 建立分支
  git checkout 分支名稱 切換分支
  git branch -m 分支名稱 建立並切換到指定分支
  git branch 查看全部分支
  git branch -d 分支名稱 刪除分支
  git merge 分支名稱 將指定分支合併到當前分支

 



在家第一次推送遠程庫(github)

$ git remote add origin 地址             # 爲地址起一個別名origin
$ git push origin master                # 將本地master分支內容以及版本信息推送到GitHub
Username for '':                        # 輸入GitHub用戶名
Password for '':                        # 輸入GitHub密碼
$ git push origin dev                   # 將本地dev分支內容以及版本信息推送到GitHub

 


在公司第一次使用遠程庫繼續開發

$ git clone https://github.com/WuPeiqi/pondo.git       # 將項目從GitHub中獲取
$ cd pondo/                                            # 切換到工做目錄
$ git branch                                           # 默認獲取到得只有master分支
$ git branch dev origin/dev                            # 建立dev分支且和遠程dev分支同步
$ vim app01/views.py                                   # 繼續開發新功能
$ git add .                                            # 添加文件到版本庫的暫存狀態
$ git commit -m '公司開發功能1'                          # 提交新功能到版本庫的分支
$ git push origin dev                                  # 提交dev分支內容到遠程GitHub託管倉庫的dev分支
Username for '':
Password for '':

 


回家繼續開發

$ git checkout dev                            # 切換到dev分支
$ git pull origin dev                         # 從遠程GitHub倉庫獲取dev分支最新內容,併合併到本地
$ vim app01/views.py                          # 繼續開發新功能
$ git add .                                   # 添加文件到版本庫的暫存狀態
$ git commit -m '家裏開發功能1'                 # 提交新功能到版本庫的分支
$ git push origin dev                         # 提交dev分支內容到遠程GitHub託管倉庫的dev分支
Username for '':
Password for '':
 

 


回公司繼續開發

$ git checkout dev                            # 切換到dev分支
$ git fetch origin dev                        # 從GitHub倉庫獲取dev分支最新內容到版本庫的分支
$ git merge origin/dev                        # 將版本庫的分支內容合併到工做區
$ vim app01/views.py                          # 繼續開發新功能
$ git add .                                   # 添加文件到版本庫的暫存狀態
$ git commit -m 'xxxxxxxxxxx'                 # 提交新功能到版本庫的分支
$ git push origin dev                         # 提交dev分支內容到遠程GitHub託管倉庫的dev分支
Username for '':
Password for '':
 

 

設置密鑰(解決每次都要輸入用戶名,密碼):

 

1. $ ssh-keygen -t rsa -C "youremail@example.com"        #配置密鑰
2. 一直默認回車
目錄,裏面有和兩個文件,一個密鑰,一個公鑰
4. 將公鑰複製給github
3. .sshid_rsaid_rsa.pub

 


多人協做工做模式 :

  

1. 先pull下最新的版本,與本地合併

2. 工做

3. 全部人輪流push,(第一個只用push,其餘人要先pull,再push,由於前人已經作了修改)
相關文章
相關標籤/搜索