diff
查看两次提交之间的变动
git diff
工作目录和暂存区git diff --cached
暂存区和 HEAD 指向的提交git diff [hash1] [hash2]
两次提交的 hash 值git diff [branchName]
工作区和分支
checkout
从历史提交(或者暂存区域)中拷贝文件到工作目录,也可用于切换分支。
当给定某个文件名时(git checkout HEAD~ foo.js
),git 会从指定的提交中拷贝文件到暂存区和工作区
当不指定文件名,而是给出一个(本地)分支时,那么 HEAD 同时拷贝一份 HEAD 中的文件到暂存区和工作区
如果既没有指定文件名,也没有指定分支名,而是一个标签、远程分支、SHA-1值或者是像main~3类似的东西,可以很方便地在历史版本之间互相切换
reset
把当前分支指向另一个位置,并且有选择的变动工作区(--hard
)和缓存区(--soft
)。也用来在从历史仓库中复制文件到缓存区,而不动工作区。
merge
合并不同分支
cherry-pick
"复制"一个提交节点并在当前分支做一次完全一样的新提交。
「案例」将本地分支关联到远程分支
描述:你在本地做着开发,假设分支名叫「xxx/dev」,你希望把你的代码贡献到 GitHub 的仓库中。
# 1. set remote (tracking infomation)
# git remote add <repo_name> <repo_url>
> git remote add github https://github.com/author-name/an-awasome-repo.git
# 2. fetch remote branch
# git fetch <remote_name> <branch_name>
> git fetch github master
# 3. merge (allow unrelated histories)
> git merge fetch_head --allow-unrelated-histories
# 4. push it!
> git push
在这其中,如果不小心 push 没有关联上游的分支,可能在 pull request 的时候会无法合并「There isn’t anything to compare.」,这时候就可以删除远程分支,再重新提一版。
# delete remote branch
# git push <remote_name> --delete <branch_name>
> git push github --delete my/dev