补充
-
git add 参数
$ git add <file>
$ git add . //添加工作区已追踪文件的修改和新文件,不包括删除文件
$ git add -u //仅提交被追踪的文件,不包括新文件
$ git add -A //上面两个的合集
复制代码
-
git rebase 和 git merge 区别
基于远程分支"origin",创建一个叫"mywork"的分支:
$ git checkout -b mywork origin //默认从当前分支切
复制代码
但是,如果你想让"mywork"分支历史看起来像没有经过任何合并一样,你也许可以用 git rebase:
$ git checkout mywork
$ git rebase origin
复制代码
这些命令会把你的"mywork"分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把"mywork"分支更新 为最新的"origin"分支(C4状态),最后把保存的这些补丁应用到"mywork"分支上。
-
git rebase 解决冲突
在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决 冲突;
在解决完冲突后,用"git-add"命令去更新这些内容的索引(index), 然后,你无需执行 git-commit,只要执行:
$ git rebase --continue
复制代码
这样git会继续应用(apply)余下的补丁。
在任何时候,你可以用--abort参数来终止rebase的行动,并且"mywork" 分支会回到rebase开始前的状态。
$ git rebase --abort
复制代码
-
拉取远程分支并创建本地分支
$ git checkout -b 本地分支名 [origin/远程分支名] //[]:默认是HEAD指向当前分支最新的版本
复制代码
从远程分支切出新分支,并切到新建分支上(HEAD指向新分支,新分支指向远程最新的版本)
这种方法,本地分支和远程分支形成映射关系
$ git fetch origin 远程分支名:本地分支名
复制代码
本地新建分支,merge远程分支,不会切到新建分支上
本地分支和远程分支不形成映射关系
-
cherry-pick
把 branch1 上面的提交commit复制到 branch2
$ git log --pretty=online // 查看缩略信息
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append bbb //修改3
e475afc93c209a690c39c13a46716e8fa000c366 add aaa //修改2
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file //修改1
复制代码
把 修改2 和 修改3 复制到branch2
$ git checkout branch2
$ git cherry-pick eaadf4e3..1094adb // 把 修改1 到 修改3 复制到branch2 (不包括修改1)
复制代码
cherry-pick 两种方法
$ git cherry-pick commitid //单个
$ git cherry-pick commitid1..commitid100 //多个,不包含commitid1
复制代码
-
代码回滚(远程和本地)
操作分析:
一开始是这样:
A - B - C - D 远程
A - B - C - D 本地第一步,git reset --hard B
A - B - C - D 远程
A - B 本地第二步,修改本地代码,记为 E
A - B - C - D 远程
A - B - E 本地如果我们现在pull 远程代码,情况如下:
A - B - C - D 远程
A - B - E - D' 本地其中,D' 包含了 C 和 D 的改动,merge 的是 "Fetched HEAD",也就是远程的 D
如果你希望远程是 A - B - E,那就不要 pull,git push --force强制推送 -
git fetch,git merge,git pull
关系:
git fetch + git merge = git pull 复制代码
git pull 过程:
// 本地分支,与线上分支的差别 git fetch //下载远程服务器最新更改到本地 git diff origin/xxx //查看差别 // 可进一步查看哪些文件改动 git diff HEAD FETCH_HEAD 或者 git diff HEAD FETCH_HEAD --stat //具体到文件改动内容 git diff HEAD FETCH_HEAD xxxx/xxxx.js git merge origin XXXX 复制代码