本地分支推送到远程分支上
git push --set-upstream origin [远程分支名]
取别人的commit到自己的分支上
git cherry-pick [commit id] 单个
git cherry-pick [x..y] 范围
git cherry-pick --abort 放弃捡樱桃
假设有三个commit id
commit a 信息a
commit b 信息b
commit c 信息c
首先checkout到其他分支拉取最新代码,然后git log 查看记录,然后切回自己的分支
因为cherry-pick是左开右闭区间,所以要获取信息b到a的commit 就要 git cherry-pick c..a
注意事项: 如果提示 fatal: Invalid revision range c.. a, 一般是因为a是最新的commit,但是本地没有拉取最新代码,所以无效范围
移除 commit 中的 merge branch
1.当前local分支git reset --hard 到merge branch 的前一个commit id;
2.在local 分支 新切一个分支git checkout -b newBranch;
3.git cherry-pick [local 分支 merge 之后的commit id]
4.git log --oneline 获取commit id
5.git checkout local
6.git cherry-pick [git log中的commit id]
7.git pull origin dev
8.git push -f
撤销某个commit
git revert [commit id]
合并多个commit为一个
- 切到dev分支, pull最新的代码
- 切回local分支
- 通过 git rebase -i xxx(xxx为local分支第一次提交之前的commit哈希值)将本地的多次提交合并为一个, 以简化提交历史
- git reset --soft HEAD^ (撤回上次的提交,因为已经合并了,所撤回的是所有的修改) 可选
- git push -f (强推, 因为本地commit hash值和远程服务器commit hash值不一样,所以需要强推)
撤回提交的commit
git reset --soft HEAD~N/[commit id] 撤回前N次提交的commit, 保留commit之后的文件修改
git reset --hard HEAD~N/[commit id] 撤回前N次提交的commit,不保留commit之后的文件修改
commit修改注释
git commit --amend 修改上一次的commit
如果是要修改某次的commit message
1. git rebase -i HEAD~3
2. 进入编辑器 把pick改成edit
3. 保存后退出编辑器
4. git commit --amend 修改信息
5. git rebase --continue
6. git puh -f
重置到任意commit id 提交状态
一般是在错误操作导致当前commit id混乱的时候使用
git reset --hard/--soft [commit id]
如果此时ahead了X个commit,那么再git reset --soft HEAD~X
当分支很长时间未处理时,使用reset 到dev分支上,然后cherry-pick每次的commit
git checkout -B temp [保险起见,怕操作错误]
git reset --hard origin/dev
git cherry-pick [commit id]
生成patch和打patch
-
生成patch
commit ID A
commit ID B
commit ID C
commit ID D
如果需要分别生成ABC三个commit的patch -> git format-patch D
如果需要生成A一个patch -> git format-patch B
-
打patch
git apply xxx.patch [打patch到changes中]
git am x.patch [直接commit] 报错 Patch format detection failed
原因:git am 必须使用的是用git format-patch 生成的patch文件来打补丁,而不能是使用git diff生成的patch.如果使用的是git diff生成的patch,会出现下面这个错误.
换种打法
git apply webpack-3-to-4.patch
-
不想打了
git am --abort
git pull origin dev 失败
错误信息 => fatal: Need to specify how to reconcile divergent branches.
解决方法: 使用git fetch + git merge
git fetch origin dev:dev
git merge origin/dev
配置git默认编辑器
git config --global --edit // ubuntu
[core]
editor = gedit