Q: 如何修改已提交的commit
A:
如果commit是HEAD,则修改staged区,然后git commit --amend,此时还可以修改commit commense
如果commit不是HEAD,比如想修改 HEAD~1,HEAD~2,则需要使用rebase命令,如下:
git rebase -i HEAD~3
修改对应的 pick 为 edit, 比如修改 HEAD~2, 保存退出
当前HEAD 落在 HEAD~2 上了,然后按照常规方法进行修改。
git rebase --continue继续下一笔
Q:如何删除若干笔的commit
A:用 git rebase -i basecommit,这里的basecommit你可以选择一个所有被删除前commit前的一个
然后在编辑界面删除哪些你不需要的commit行,保存退出即可
Q:如何cherry-pick 一笔其他分支上的commit
A:
如果这笔commit是其他分支的最新commit,则 git cherry-pick other_branch
若不是最新commit,如倒数第三笔 ,则git cherry-pick other_branch~2
Q: 如何同时cherry-pick多笔?
A:git cherry-pick commit1 commit2 commit3, 好像不能 cherry-pick 一个范围内的commit
小贴士:可以用 git rev-parse 确认commit引用和 SHA1码之间的对应关系
Q: 如何查看简要的Log
A: git log --oneline
git log branch 可以查看某分支上的log
git log -3 可以查看最新的3笔记录
Q: 打补丁编译报错定位
A:
查看某文件的log: git log -- filepath/filename
查看某文件在两笔commit上的改动 :git diff commit1 commit2 filepath/filename
查看谁修改了此文件的每一行 : git blame filepath/filename
Q:如何从当前commit删除文件?
A: git rm --cached path/file 可以使该文件处于 untracked状态,然后在 git commit 就可以了
另外,若有多个文件要删,而文件处于不同路径,相同文件名的情况,可以用* 代替路径名,这一点 linux还是很强大的。
Q: 分支B 从分支A cherry-pick了多笔,然后分支A amend commit了,怎么快速同步这些amend 到分支B?
A:
Q: merge时遇到2进制文件冲突如何处理?
A:git checkout from_branch -- file1 file2 filen
Q: 如何在最终提交前将多笔commit合并成一笔,并修改这一笔的comment
A: 以3笔记录为例
1. git rebase –i HEAD~3
2. 将第一笔Pick修改为reward , 即 use commit, but edit the commit message3. 将第2,第3个pick批改为s,即 squash = use commit, but meld into previous commit
4. 然后输入":wq”退出。
5. 这时git会主动把第二,三个提交归并到第一个中去。并提示我们修改第一笔的comment.
6. git rebase --continue继续下一笔
这个FAQ在我们最后提交代码时很有用,因为我们经常会在本地多次修正和备份自己的代码。但最后提交时希望可以变得干净。
Q: 当本地有untracked或 unstaged代码时是否可以commit.
A: 放心吧,只会commit你已经 staged的代码,即执行过 git add 的代码。