Android 开发者必看:Git 使用过程中的一些常见场景问题总结
git reflog
4. 查看某次提交的内容
git show <commit_id>
5. 只是修改了工作区的文件,想恢复到原来修改前的样子
git reset --hard HEADgit checkout -- <file_name>
6. 被修改的文件已经添加到了暂存区,想撤销添加
git reset --mixed HEAD
7. 被修改的文件已经 commit 提交,想撤销提交
git reset --soft HEAD^
8. 已经提交到远程主机的文件,想撤销
git revert <commit_id>git revert HEAD
9. 已经开发一半的功能,但是没有开发完,这时候有个 bug 要紧急处理,需要放下手头的功能,赶去修改 BUG
// 保存现场 git stash
// 恢复现场 git stash pop
10. 加入过历史版本的文件,因某些原因被删除了想恢复
git checkout <commit_id> -- <file_name>
另外你也可以用 reset 命令来完成
11. 需要单独把多次提交中的某一次提交从你的分支迁移到另外一个分支上,即跨分支应用 commit
git cherry-pick <commit_id>
比如:我想把以下分支
A-B master
C-D-E-F-G develop
中的 D,F 两次提交移动到 master 分支,而保持其他 commit 不变,结果就像这样
A-B-D-F master
C-E-G develop
那么,思路是将 D,F 用 cherry-pick 应用到 master 分支上,然后将 develop 分支对 master 分支变基。
$ git checkout master
$ git cherry-pick D
$ git cherry-pick F
$ git checkout develop
$ git rebase master
注意有些情况下使用 cherry-pick 会存在冲突,解决方法和我们平时合并分支遇到冲突一样。
12. 遇到文件冲突,可以手动解决,或者用你配置的工具解决,记得把文件标位 resolved:add/rm
如:常见的拉取同事的代码合并引起冲突
1. 手动处理冲突 2. 文件标志位置为 resolved:git add <file_name>3. 继续合并 git merge --continue 当然也可以选择放弃合并:git merge --abort
13. 让自己本地分支上面的每一次提交日志变得更有意义,有时候需要我们选择有意义的提交日志信息合并上去
比如我们在 bugfix 分支上面由于修改 bug 提交了很多次,修复好了之后,我们想把这些提交合并入我们的 master 分支
git checkout mastergit merge --squash bugfixgit commit -m "bug fixed"
上面操作会将 bugfix 分支上的所有 commit
都合并为一个 commit,并把它并入我们的 master 分支上去。这里还有一点需要注意的是:--squash 含义代表的是本地内容与不使用该选项的合并结果相同,但是不提交,不移动 HEAD 指针,所以我们要另外多一条语句来移动我们的 HEAD 指针,即最后的 commit。
14. 有时候需要整理我们本地的 commits,可以使用 Squash
git rebase -i <commit>
举例:
git rebase -i HEAD~5
执行完后,Git 会把所有 commit 列出来,让你进行一些修改,修改完成之后会根据你的修改来 rebase。HEAD-5 的意思是只修改最近的 5 个 commit。
pick 033beb4 b1pick b426a8a b2pick c216era b3pick d627c9a b4pick e416c8b b5
Rebase 033beb4..e416c8b onto 033beb4
Commands:
p, pick = use commit
r, reword = use commit, but edit the commit message
e, edit = use commit, but stop for amending
s, squash = use commit, but meld into previous commit
f, fixup = like "squash", but discard this commit's log message
x, exec = run command (the rest of the line) using shell
If you remove a line here THAT COMMIT WILL BE LOST.
However, if you remove everything, the rebase will be aborted.
上面 pick 是要执行的 commit 指令,另外还有 reword、edit、squash、fixup、exec 这 5 个,具体的含义可以看上面的注释解释,比较简单,这里就不说了。 我们要合并就需要修改前面的 pick 指令:
pick 033beb4 b1squash b426a8a b2squash c216era b3squash d627c9a b4squash e416c8b b5
也就是下面这 4 个提交合并到最前面的那个提交里面,按 esc,打上:wq 提交保存离开。 接着是输入新的 commit message
b
评论