穿越过去和未来!
1 前言
Git一款强大且应用广泛的分布式版本控制软件。
本手册参考的是莫烦教学和Git-Tutrial。笔者边学习边做笔记加深印象,也方便以后查阅。
2 基本操作
- 查看提交(
commit
)记录:- 详细:
git log
。 - 简洁:
git log --oneline
。
- 详细:
- 查看文件状态:
- 详细:
git status
。 - 简洁:
git status -s
。
- 详细:
- 添加修改:
- 对所有文件:
add .
。 - 对单个文件:
add file_name
。
- 对所有文件:
- 提交修改:
git commit -m "comments"
。 - 添加并提交修改:
git commit -am "comments"
。(仅对已被添加到管理库的文件有效) - 查看文件的不同:
$ git diff
:查看这次还没add
(unstaged
)的修改部分。$ git diff --cached
:如果已经add
了这次修改,文件变成了可提交状态(staged)
,我们可以在diff
中添加参数--cached
来查看修改。$ git diff head
:查看add
过(staged
)和没add
(unstaged
)的修改。
- 将本地记录发布:
git push
。
3 回到从前
3.1 针对整个版本库
- 把这次的修改加入添加到上次的
commit
中,而不产生新的commit
(但版本号会改变):- 不修改
comment
:git commit --amend -no-edit
。 - 修改
comment
:git commit --amend -m "commets"
。
- 不修改
- 把经过
add
后(staged
)文件回退到add
之前(modified
):git reset file_name
。 - 版本跳跃:
- 当前版本的第前n个版本:
- 每个上角标代表回退一个版本:
git reset --hard HEAD^
。 - 回退n个版本:
git reset --hard HEAD~n
。(当n取0时可回退到当前版本最初的unmodified
状态)
- 每个上角标代表回退一个版本:
- 指定版本号的版本:
git reset --hard HEAD 3f33f33
。- 通过
git log
获取当前版本及之前的版本号。 - 通过
git reflog
获取HEAD
的指向记录,包含了所有版本的版本号。
- 通过
- 指定
HEAD
记录的版本:git reset --hard HEAD@{1}
。(需先在git reflog
中找到所求版本的HEAD
记录)
- 当前版本的第前n个版本:
3.2 针对单个文件
回退单个文件到指定版本号:git checkout 3f33f33 -- file
。
4 分支管理
- 新建分支:
- 新建不切换到该分支:
git branch branch_name
。 - 新建且切换到该分支:
git checkout -b branch_name
。
- 新建不切换到该分支:
- 删除指定分支:
git branch -d branch_name
- 查看所有分支:
git branch
。(*
号表示当前所处分支) - 切换分支:
git checkout branch_name
。(HEAD
指向该分支) - 合并分支:
merge
:- fast-forward:
git merge branch_name
。 - no-fast-forward:
git merge --no-ff "comments" branch_name
。
- fast-forward:
rebase
:git rebase branch_name
。
merge
冲突:通过人工修改来解决冲突,之后可使用git commit -am "comments"
添加并提交。rebase
冲突:通过人工修改来解决冲突,之后可使用git add file_name
和git rebase --continue
添加并提交。- 临时修改:
- 暂存修改:
git stash
。 - 其他任务:一般新建分支来完成其他任务,然后合并。
- 恢复暂存:
- 查看缓存:
git stash list
。 - 恢复缓存:
git stash pop
。
- 查看缓存:
- 暂存修改: