从 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关开始 玩不动了……