重要!
一切记录都可以通过如下命令获取,一切操作都可以得益于这个命令找回
# git reflog
一:Commit
场景1: 修改前一次commit的message信息
# git log commit 16a60240aa5328fe47b23b00bf752b21fe634bca (HEAD -> add-upload-api, origin/add-upload-api) ---第2次commit … commit 60b3e9b90cfb75dfbfcb0f8b82b932ebb56657e5 ---第1次commit,待修改log的commit Author: root <root@lcmaas-wksp-g.novalocal> Date: Thu Nov 11 08:45:30 2021 +0000 ....some message should be correct.... commit f3da70fe98c083781335e61a35a18c52b91392ac (origin/master, origin/HEAD, master) ---第0次commit,基commit
【操作步骤】
1. 重置前两个commit, 将待修改的commit的操作由 "pick" 改成 "edit", 注意这里的顺序和log的是相反的
# git rebase -i HEAD~2 edit 60b3e9b ...some message should be correct.... ---由pick改成edit pick 16a6024 fix style mistakes detected by golint # Rebase f3da70f..16a6024 onto f3da70f (2 commands)
保存退出
Ctl + O (Write Out) -> 回车
Ctl + X (Exit)
2. 修改message
# git commit --amend 保存退出 Ctl + O (Write Out) -> 回车 Ctl + X (Exit)
3. 提交修改
# git rebase --continue Successfully rebased and updated refs/heads/add-upload-api.
# git push origin xxx (maybe need -f)
场景1.5:修改之前某一次commit的message信息
整体思路: 基于指定commit的前一个commit进行rebase,因为这样会“涉及”这次commit
# git log --oneline e33ad59 message3 e95f51f message2 ###待修改commit 2418162 message1 #git rebase -i 2418162a79fe52efea8dd0818f4c47b43583d9b0
...pick -> edit, 保存退出...
# git commit --amend
...修改,保存,退出...
#git rebase --continue
场景2:间隔合并commit, 比如想针对之前的某个commit(即不是最近的那个)做一些修改
整体思路: 将新的修改作为一次commit,然后做rebase,即重置base
例如如下的情况下,想针对第一次commit再增加一些修改:
# git log --oneline be6ce3c my second commit --第2次commit 60b3e9b my first commit --第1次commit f3da70f (origin/master, origin/HEAD, master) Add CONTRIBUTING.md --第0次,将作为base commit
0. 将当前的修改作为一次新的commit提交
# git add # git commit -m"test"
1. 修改
# git rebase -i HEAD~3 pick 60b3e9b my first commit pick be6ce3c my second commit pick 5d9a124 test 修改顺序, 将最新commit放到待修改commit的后面,并将该commit操作改成"squash", 表示与前一次合并: pick 60b3e9b my first commit squash 5d9a124 test pick be6ce3c my second commit 保存退出 Ctl + O (Write Out) -> 回车 Ctl + X (Exit)
3. 提交修改
3 # git rebase --continue Successfully rebased and updated refs/heads/add-upload-api. 4. # git push origin xxx (maybe need -f)
场景3:为commit增加body信心
完整的commit message包含title(必选), body(可选), footbar(可选)
- 常用方式:只提交title字段,如下
#git commit -m"这是一个title"
- 官方方式:编写message文档,然后提交
参考:https://cbea.ms/git-commit/#separate
https://cbea.ms/git-commit/#separate
- 补救方式:命令行只提交title后增加body
# git commit --amend <这是一个title> <在这里可以增加你的body>
二. Push
命令标准:
git push <remote 名字> <本地分支的名字> : <远程库的名字>
用法1:# git push origin HEAD:refs/for/master
【解析】
origin : 是远程的库的名字
HEAD: 是一个特别的指针,它是一个指向你正在工作的本地分支的指针,可以把它当做本地分支的别名,git这样就可以知道你工作在哪个分支
refs/for :意义在于我们提交代码到服务器之后是需要经过code review 之后才能进行merge的
refs/heads 不需要
【实操场景】