从 Githug 里学到的技巧
趁等联调的间隙刷了刷 Githug,学到了几招。
第19关 git commit --amend
追加提交,并修改 commit message。
第21关 使用 reset
将文件移出 staging area
git reset HEAD to_commit_second.rd
第22关 放弃最近一次提交,同时保留改动到 staging area
git reset --soft HEAD^1
第24关 查看 remote 地址
git remote -v
第27关 添加远程 repo
???这个操作的作用是?
git remote add origin https://github.com/githug/githug
第28关 rebase
当前状态:
Yans-MacBook-Pro:git_hug yanqian$ git status
On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commit each, respectively.
(use "git pull" to merge the remote branch into yours)
nothing to commit, working directory clean
rebase,并推送到远程
git rebase origin/master
git push origin master
第34关 checkout tag over branch
如果有 tag 和 branch 重名(尽量避免这种情况),可以显式指明 checkout 到 tag。
git checkout tags/v1.2
第35关 branch_at
跳过最近一次 commit 创建分支。
git branch my_branch HEAD^1
第37关 push_branch
git push origin test_branch:test_branch
第41关 repack
git repack
git repack -d
第42关 cherry pick
把其他分支上某一个 commit 的改动 “merge” 过来。首先,通过 git log 找到这次提交的 id,再使用 git cherry-pick
命令:
git cherry-pick ca32a6dac7b6f97975edbe19a4296c2ee7682f68
第43关 git grep
git grep 是项目范围内的 code search。下面这种用法是找出项目里有多少个 TODO。
git grep TODO
第44关 rename commit
对于久远的提交,不能使用 git commit --amend
来修改 commit message。这时要想到使用 git rebase -i
。
git rebase -i bfd760f5f0e0ae30def48805437c3c2cc50d0dc7
注意,这里的 commit id 应该是要修改的 commit 之前的 id。执行 git rebase -i 后,把要重命名的 commit 行首的 pick 改为 reword。退出 vi 编辑器后,再重新编辑 commit message,之后 commit message 就修改完毕了。
第45关 把多次提交合并成一次
git rebase -i bfd760f5f0e0ae30def48805437c3c2cc50d0dc7
将需要合并的 commit 前的 pick 改为 squash(或者一个字母 s)。填写新的 commit message 即可。
第46关 在 merge 的同时 squash
git merge --squash long-feature-branch
git commit -m "merge from long-feature-branch"
第47关 reorder commits
同样使用 git rebase -i
命令。
在编辑器中,将需要调换顺序的两行对调,退出编辑器即可。
第48关开始 玩不动了……