穿越过去和未来!

1 前言

Git一款强大且应用广泛的分布式版本控制软件。

本手册参考的是莫烦教学Git-Tutrial。笔者边学习边做笔记加深印象,也方便以后查阅。

2 基本操作

  1. 查看提交(commit)记录:
    • 详细:git log
    • 简洁:git log --oneline
  2. 查看文件状态:
    • 详细:git status
    • 简洁:git status -s
  3. 添加修改:
    • 对所有文件:add .
    • 对单个文件:add file_name
  4. 提交修改:git commit -m "comments"
  5. 添加并提交修改:git commit -am "comments"。(仅对已被添加到管理库的文件有效)
  6. 查看文件的不同:
    • $ git diff:查看这次还没add(unstaged)的修改部分。
    • $ git diff --cached:如果已经add了这次修改,文件变成了可提交状态(staged),我们可以在diff中添加参数--cached来查看修改。
    • $ git diff head:查看add过(staged)和没add(unstaged)的修改。
  7. 将本地记录发布:git push

3 回到从前

3.1 针对整个版本库

  1. 把这次的修改加入添加到上次的commit中,而不产生新的commit(但版本号会改变):
    • 不修改commentgit commit --amend -no-edit
    • 修改commentgit commit --amend -m "commets"
  2. 把经过add后(staged)文件回退到add之前(modified):git reset file_name
  3. 版本跳跃:
    • 当前版本的第前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记录)

3.2 针对单个文件

回退单个文件到指定版本号:git checkout 3f33f33 -- file

4 分支管理

  1. 新建分支:
    • 新建不切换到该分支:git branch branch_name
    • 新建且切换到该分支:git checkout -b branch_name
  2. 删除指定分支:git branch -d branch_name
  3. 查看所有分支:git branch。(*号表示当前所处分支)
  4. 切换分支:git checkout branch_name。(HEAD指向该分支)
  5. 合并分支:
    • merge
      • fast-forward:git merge branch_name
      • no-fast-forward:git merge --no-ff "comments" branch_name
    • rebase:git rebase branch_name
  6. merge冲突:通过人工修改来解决冲突,之后可使用git commit -am "comments"添加并提交。
  7. rebase冲突:通过人工修改来解决冲突,之后可使用git add file_namegit rebase --continue添加并提交。
  8. 临时修改:
    • 暂存修改:git stash
    • 其他任务:一般新建分支来完成其他任务,然后合并。
    • 恢复暂存:
      • 查看缓存:git stash list
      • 恢复缓存:git stash pop