处理合并冲突 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>: 基于进度创建分支。

恩恩,今天国庆,只有一个字:堵!:(


ingood
708 声望80 粉丝

Keep it simple & stupid.