git 簡略筆記之二

ingood發表於2016-10-02

處理合並衝突 Git merge conflict

建立分支並 checkout 到該分支

git checkout -b app/newapp

修改檔案 a.php 的11行,儲存提交

vi a.php
git add .
git commit -m `edit a.php 11`

切換回 master 分支,也修改 a.php 的11行

git checkout master
vi a.php
git add .
git commit -m `edit a.php 11, master` 

執行合併

git merge app/newapp

會出現如下錯誤提示

Auto-merging app/Http/a.php
CONFLICT (content): Merge conflict in app/Http/a.php
Automatic merge failed; fix conflicts and then commit the result.

編輯 a.php 處理衝突,再 add 後提交。

設定 git alias

通過 git 自帶的 alias 命令進行設定

git config --global alias.s status

以後,git status 命令就可以用 git s 來替換了。
設定的別名我們可以在~/.gitconfig找到,同樣,上述命令也可以直接通過編輯~/.gitconfig的`[alias]段進行新增修改。

另外,也可以通過命令列進行刪除該別名

git config --global --unset alias.s

通過 shell 的配置檔案進行別名配置

  • 如果你用的是 Mac 自帶的 bash,可以編輯 ~/.bashrc 或者 ~/.bash_profile 檔案;

  • 如果你用的是 zsh,則編輯~/.zshrc

  • 增加的配置內容如下:

    g=git
    ga=`git add`
    gaa=`git add --all`
    gb=`git branch`
    gba=`git branch -a`
    gbd=`git branch -d`
    gcm=`git checkout master`
    gcmsg=`git commit -m`
    gco=`git checkout`
    gd=`git diff`
    gl=`git pull`
    glgg=`git log --graph`
    gm=`git merge`
    gp=`git push`
    gr=`git remote`
    

通過 oh-my-zsh 新增 git 外掛

編輯 ~/.zshrc 新增或調整如下程式碼

plugins=(git)

重啟 zsh。即可擁有 git 外掛的各種 git alias。

Git stash 改善工作流

我們的專案總會有一條主線和一條以上的分支,當我們在分支進行功能擴充的時候,如果發現主線有一些 bug 或者功能需要調整,而又不想把分支 commit ,但不 commit 又會無法 checkout 到 master 工作的時候,stash 就派上用場了。

git stash: 備份當前的工作區的內容,從最近的一次提交中讀取相關內容,讓工作區保證和上次提交的內容一致。同時,將當前的工作區內容儲存到Git棧中。

git stash pop: 從Git棧中讀取最近一次儲存的內容,恢復工作區的相關內容。由於可能存在多個Stash的內容,所以用棧來管理,pop會從最近的一個stash中讀取內容並恢復。

git stash apply stash@{1}:可以將你指定版本號為stash@{1}的工作區取出來,如果不包含stash@{1},則取回最近的。applypop 的區別是,pop 取出後,git 棧就會釋放最近工作區,apply 只是把對應工作區應用到當前,並不釋放,若要釋放,需結合 git stash drop 刪除某一個進度.

git stash list: 顯示Git棧內的所有備份,可以利用這個列表來決定從那個地方恢復。

git stash clear: 清空Git棧。此時使用gitg等圖形化工具會發現,原來stash的哪些節點都消失了。

git stash branch <branchname> <stash>: 基於進度建立分支。

恩恩,今天國慶,只有一個字:堵!:(

相關文章