git config —global user.name 'Ying'
git config —global user.email 'xxx@email.com'
git config —global core.editor 'vim'
複製代碼
在現實生活中咱們可能會在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
在實際開發中, master分支的代碼必定是最後通過審覈驗證,不會出問題的代碼, 在開發中或者修復bug時, 咱們最好是經過建立的分支來進行代碼的管理;app
例如建立一個feature-about分支, 用來進行需求的開發
git branch feature-about
複製代碼
將分支切換到 feature-about分支
git checkout feature-about
複製代碼
這個操做 和 git branch 分支 + git checkout 分支 效果徹底一致
git checkout -b feature-about
複製代碼
git checkout master
git add .
git commit -m '提交紀錄說明'
複製代碼
在執行完上面的操做後, master和feature-about是兩個平行的時間線了編輯器
咱們在分支上的代碼已經所有通過測試,而且準備發佈後, 咱們天然要把分支的代碼合併到master上來;ide
按照咱們筆記的案例, 咱們應該執行
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
}
}
複製代碼
衝突解釋:
在刪除代碼後繼續執行
git add .
git commit -m '註釋說明'
複製代碼
這樣, 合併衝突就垂手可得的解決了
以前咱們說分支能夠處理咱們平時的功能開發和bug修復,當咱們須要遇到突發狀況在master分支修改代碼時, 先提交咱們在分支代碼, 而後切回master, 在master上修改代碼後再切換回分支繼續寫咱們的代碼; 可是這都是理想狀態,在咱們工做中, 可能當咱們須要去master修改代碼時, 分支的代碼還不具有被提交的代碼質量, 這時咱們就須要用到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上的工做;
複製代碼