Git基礎操做,看這篇就夠了

Mac安裝Git的三種方式

  • 安裝 Xcode Command Line Tools
  • 在Git官網下載git客戶端
  • 執行 brew install git

配置git

git config —global user.name 'Ying'
git config —global user.email 'xxx@email.com'
git config —global core.editor 'vim'

複製代碼
  • --global : 表示全局配置
  • user.name 和 user.email用於設置用戶名和郵箱, git會使用這些信息記錄各類操做
  • core.editor 用於設置git默認編輯器

建立一個倉庫

  1. 建立一個文件夾, cd 到文件夾內, 執行git init
  2. 在文件夾中建立你的工程和文件,執行 git status來查看文件狀態
  3. 能夠接着執行 git add 文件名 / git add . 所有文件
  4. 爲了把文件提交到倉庫, 咱們能夠執行 git commit -m '註釋'來提交
  5. 經過執行 git log 來查看提交日誌, git在每次提交時都會生成一個對應的哈希值

將一個git倉庫託管到GitHub

  1. 在GitHub上新建一個倉庫
  2. 執行 git remote add origin github.com/GitHub用戶名/倉…
  3. 執行 git push -u origin master
  4. 這時你的項目將被託管到GitHub

修改你的提交

在現實生活中咱們可能會在Git操做時出現錯誤, 因此回撤你的提交是必備技能git

咱們和別人共享代碼

若是咱們已經把代碼add 而且commit,而且push進倉庫, 咱們只能修改代碼, 而且執行 add 和 commit操做來修復錯誤github

本身本地管理代碼時

咱們可使用 git reset 來撤銷本次錯誤的提交,而後修改後再提交vim

咱們能夠執行
git reset --soft ae960b6382412a8290314168bbf8c67520732591(經過日誌找到上次提交的版本對應的哈希值)

複製代碼

git reset --soft表示撤銷本次提交,可是保留此次提交後對文件的修改緩存

咱們也能夠執行
git reset --hard ae960b6382412a8290314168bbf8c67520732591

複製代碼

git reset --hard操做雖然會撤銷此次提交, 可是它不會保留你在上次提交後繼續寫的代碼,而是完全回到了上次提交的版本,因此在平時咱們是不會用這個命令的bash

建立分支, 使用分支來解決Bug和開發需求

在實際開發中, master分支的代碼必定是最後通過審覈驗證,不會出問題的代碼, 在開發中或者修復bug時, 咱們最好是經過建立的分支來進行代碼的管理;app

  • git branch 來建立一個分支,分支的名稱一般是反應這個分支的用途
例如建立一個feature-about分支, 用來進行需求的開發
git branch feature-about
複製代碼
  • git checkout 是將代碼從master分支切到其餘分支
將分支切換到 feature-about分支
git checkout feature-about

複製代碼
  • 建立和切換分支咱們也能夠經過更簡單的操做來一塊兒完成
這個操做 和 git branch 分支 + git checkout 分支 效果徹底一致
git checkout -b feature-about
複製代碼
  • 當咱們在分支上徹底寫好代碼,進行 add . 和 commit 提交以後, 咱們能夠回到master分支,而後更新master分支
git checkout master
git add .
git commit -m '提交紀錄說明'
複製代碼

在執行完上面的操做後, master和feature-about是兩個平行的時間線了編輯器

合併分支

咱們在分支上的代碼已經所有通過測試,而且準備發佈後, 咱們天然要把分支的代碼合併到master上來;ide

  • 首先咱們要肯定本身已經在master分支上
  • 執行合併操做 git merge 分支名,這時 git會打開默認編輯器, 讓咱們對此次合併作一個說明
按照咱們筆記的案例, 咱們應該執行
git merge feature-about

複製代碼

這時咱們執行git log, 就能看到合併成功,以案例爲準測試

執行
git log
會看到
commit +  提交版本的哈希值id + (HEAD -> master, feature-about)

此時, 兩個分支時間線上的行爲, 以發生時間爲序合併到了一塊兒
複製代碼

刪除分支

如今, 分支就沒有存在的意義了, 咱們能夠執行 git branch -d 分支名 把它刪掉就行了ui

刪除分支
git branch -d feature-about
複製代碼

處理分支合併時的衝突

出於某種緣由, 咱們常常會出如今兩個分支上修改了同一處代碼, 這時會產生衝突, 通常須要咱們解決衝突後合併, 也能夠取消此次合併;

建立一個分支, 而且切換到分支上
git checkout -b fixbug/doSomething

修改代碼.....

執行git操做
git add .
git commit -m 'finish fix bug'

回到master
git checkout master

修改在fixbug/doSomething修改的相同地方的代碼.....

執行git操做
git add .
git commit -m 'finish code change'

合併代碼
git merge fixbug/doSomething

//此時,由於合併致使的衝突出現

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        view.backgroundColor = UIColor.red
        AF.request("https://www.geekbang.org/").response {
            response in
<<<<<<< HEAD
            debugPrint("這裏打印response")
=======
            debugPrint("response -- \(response)")
>>>>>>> fixbug/doSomething
        }
    }
    
複製代碼

衝突解釋:

  • <<<<<<< HEAD 到 ======= 之間的代碼表示當前分支的代碼
  • ======= 到 >>>>>>> fixbug/doSomething以前的代碼表示在 fixbug/doSomething分支上作的事
  • 這個時候就須要咱們本身作決定要留下哪一個分支的代碼, 而後將另外的代碼和這些特殊符號刪除
在刪除代碼後繼續執行
git add .
git commit -m '註釋說明'
複製代碼

這樣, 合併衝突就垂手可得的解決了

stash臨時緩存代碼

以前咱們說分支能夠處理咱們平時的功能開發和bug修復,當咱們須要遇到突發狀況在master分支修改代碼時, 先提交咱們在分支代碼, 而後切回master, 在master上修改代碼後再切換回分支繼續寫咱們的代碼; 可是這都是理想狀態,在咱們工做中, 可能當咱們須要去master修改代碼時, 分支的代碼還不具有被提交的代碼質量, 這時咱們就須要用到stash緩存了

模擬 stash的使用

咱們新建一個目錄
執行 git init
而後建立一個index.md文件

而後執行 
git add .
git commit -m '註釋'

而後建立分支
git checkout -b feature-about

而後在這個分支上 建立一個文件 git-stash.md文件
假設咱們如今要回到master上修改東西,可是git-stash文件裏的內容咱們還不能提交, 若是如今咱們回到master分支

執行
git status

會看到
Untracked files:
  (use "git add <file>..." to include in what will be committed)

git-stash.md

nothing added to commit but untracked files present (use "git add" to track)


<!--

但咱們目前還不能把這些改變提交到 master上, 一般狀況是咱們要回到 feature-about分支,而且提交代碼, 而後再回到master分支來修改東西;
在修改完東西后回到 feature-about分支, 
執行 git log
而後執行
git reset --soft 以前的提交版本的hash值回到當前提交的時間點上,繼續代碼開發, 但略顯麻煩

-->

咱們能夠用git stash 臨時緩存代碼
若是咱們此時執行 git stash
咱們可能會看到 No local changes to save; 
what?, 這是什麼鬼

這是由於git-stash.md 仍是Untracker狀態, 並無進入索引區, git stash是將索引區轉存起來, 因此咱們須要先將其添加進索引區

因此應該執行
git add .
git stash
這時,纔是正確的,成功將git-stash.md文件暫緩在 feature-about分支了

此時咱們回到 master分支
git checkout master
咱們再執行
git status
咱們將在master分支看不到在分支 feature-about上的git-stash.md 文件的改動了

此時咱們就能夠在master上修改本身的需求,在完成後回到feature-about分支
執行
git stash list 查看緩存

咱們能夠執行
git stash apply stash{0}來恢復代碼
咱們也能夠執行
git stash pop stash{0}來恢復代碼而且清除緩存

場景分析:
假如咱們在master分支上改好代碼後,但因爲操做失誤,刪除了 feature-about分支, 咱們怎麼辦?
咱們在master分支上
執行 git stash list會發如今feature-about分支上的stash仍是存在的
此時,咱們執行
git stash pop 現將緩存恢復到 master分支
而後執行
git stash branch feature-about git會用緩存的內容從新建立 feature-about 分支, 繼續以前在feature-about上的工做;

複製代碼
相關文章
相關標籤/搜索