- 查看状态
可以看到当前分支名,分支中是否有未提交的文件,stage 的文件等。
git status
- 提交代码
git add xxx # xxx 可以是目录,或者文件,这一步是 stage 文件
git commit -m "commit message"
# 或者一步完成, 注意这将把所有更改全部提交
git commit -am "commit message"
# 想把这次提交和上一次提交合并
git commit --amend
- 放弃提交、更改、暂存文件
# 放弃某些提交,这个会留下被放弃的 commit 记录
git revert <commit-hash-id1> <commit-hash-id2>
# !!!危险,谨慎操作!!!, 放弃某次提交后面所有的提交,这个没有被放弃的 commit 记录
git reset --hard <commit-hash-id> # 或者回滚最后三次提交 git reset --hard HEAD~3
# 放弃 stage 文件 (xxx 可以是目录,或者文件)
git reset xxx
# 放弃已追踪文件改动 (xxx 可以是目录,或者文件)
git checkout xxx # 或者 git reset --hard 这个非常危险,会把所有已追踪文件还原到上次提交的状态(即 HEAD)
# 清除未追踪文件
git clean -f # 如果只清楚某个文件 git clean -f xxx-file
# 清楚未追踪文件和目录
git clean -fd
- 切换分支
git checkout branch-name-you-want-go
- 新建分支
举例: 从分支
branch-a
创建出一个分支叫branch-b
:
方式一:
git checkout branch-a
git checkout -b branch-b
方式二:
git branch branch-a branch-b
git checkout branch-a
- 列出所有分支
git branch -a
- 从远端拉取分支更新
git fetch
# 同步远端分支数量(把远端删除的分支反映出来)
git fetch --prune
# 附带 tag 信息
git fetch --tags
- 合并分支
举例: 把分支
branch-a
合并到分支branch-b
:
git checkout branch-b
git merge branch-a
# 如果合并不要 fast forward
git merge branch-a --no-ff
# 如果合并要把提交压合成一个
git merge branch-a --squash
# 如果要把 `branch-a` 作为基础来合并(即'branch-b'相对于'branch-a'的差异放在'branch-a'提交历史后面,不再按照提交时间合并)
git rebase branch-a
- 把远端的分支直接合并到本地开发的分支
举例: 把远端的分支
branch-a
合并到本地的分支branch-a
:
git checkout branch-a
git pull branch-a
# 等同于:
git fetch branch-a
git merge branch-a
- 把本地已提交的修改推送到远端
举例: 把本地的分支
branch-a
合并到远端的分支branch-a
:
git push orgin branch-a
# 或者设置了 up-stream 后直接
git push
- 隐藏当前的工作
如果突然有任务插入,又不想提交当前未完成的改动,可以隐藏起来,等完成紧急的任务后,再回到原来的分支,将其弹出
# 隐藏改动
git stash "stash messgae"
# 查看隐藏的改动列表
git stash list
# 弹出隐藏改动到当前分支
git stash pop
- 把另一个分支中的 commit 合并到当前分支
git cherry-pick <commit id>
- 查看提交 log
git log
- 查看操作 log
可以看到自己在仓库中做了哪些操作,这个就是“后悔药”
git reflog