本地分支推送到遠程分支上
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