Git常用命令总结

  • git

Commit

创建一个提交:

1
git commit

Branch

Git分支是指向某个提交记录,不会造成内存上的开销,按逻辑分解工作到不同的分支,星号( * )标识表示当前所在分支

  1. 创建分支:

    1
    git branch newbranch
  2. 切换分支:(从master分支切换到newbranch分支)

    1
    git checkout newbranch
  3. 简洁方式:

    创建一个分支并且切换到新的分支上

    1
    git checkout -b <branch_name>
  4. 1
    cpp git branch xx master^^2^

Merge

将两个或两个以上的开发历史合并到一起

  1. 1
    git pull = git fetch + git merge
  2. Merge模拟:

    1
    2
    3
    4
    5
    git checkout -b newbranch
    git commit -m "newbranch提交"
    git checkout master
    git commit -m “master提交”
    git merge newbranch //将newbranch合并到master

Rebase

1 合并多个commit为一个完整commit

2 将某一段commit粘贴到另一个分支上

  1. 将newbranch分支的工作移到master分支上,实现并行开发:
    1
    2
    3
    4
    5
    6
    git checkout -b newbranch
    git commit -m "newbranch更新"
    git checkout master
    git commit -m "master更新"
    git checkout newbranch
    git rebase newbranch

HEAD 是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录,常情况下指向分支名

C0 → C1( master* ):HEAD → master → C1

然后执行

1
git checkout C1
,变成

HEAD → C1

  1. 分离出HEAD并使其指向一个提交记录
    1
    git checkout <hash-value>

相对引用( ^/~ )

  • 使用 ^ 向上移动 1 个提交记录
  • 使用 ~<num> 向上移动多个提交记录,如 ~3
1
git checkout xxx^
1
cpp git checkout xxx~3
  1. 强制修改分支位置:
1
git branch -f master HEAD^ 

将master分支强制移动到HEAD的上一个分支

撤销变更

  1. git reset

    git reset 向上移动分支,原来指向的提交记录就跟从来没有提交过一样

    对共享远程分支无效

1
git reset HEAD~1
  1. git revert

    撤销更改并支持分享给别人

    1
    git revert HEAD

    创建一个新的提交,该提交与HEAD的前一条提交相同

自由修改提交树

  1. git Cherry-pick (知道提交的哈希值

    git cherry-pick <提交号>…

    将一些提交复制到当前所在的位置(HEAD)下面

    1
    2
    git cherry-pick C3 C4 C5

  2. 交互式rebase

    参数 —interactive ,简写为 -i

    1
    2
    git rebase -i HEAD~3

调整提交记录的顺序

删除提交

合并提交

标签

可以永久将某个特定的提交命名为里程碑,不会随着新的提交而移动,它表示了某个特定位置

1
git tag version1 C1

锚点

描述最近的标签,

1
git describe <ref>
,得到例ref最近的标签、二者间相差多少个提交记录

远程仓库

Clone

在本地创建一个远程仓库的拷贝

远程分支

反映了远程仓库的状态,在检出时自动进入分离 HEAD 状态。

远程分支命名规范: [remote name] / [branch name]

例如:origin/master,分支为 master ,远程仓库为 origin

在使用 git clone 时,git将远程仓库命名为 origin(默认命名)

1
git checkout origin/master(head分离)

Fetch

从远程仓库下载本地仓库缺失的提交记录

更新远程分支指针

(实际上将本地仓库中的远程分支更新成了远程仓库相应分支最新的状态)

(为下载操作,不改变本地仓库状态)

Pull

从远程仓库获取更新并合并到本地的分支当中

Push

git push将变更上传到远程仓库,并在其上合并提交记录

偏离的提交历史

对于提交已更新的旧版本的更改,需要先合并新版本在提交更改

git commit//对于旧版本的更改

git pull --rebase//合并新版本并提交更改

git push//提交到远程分支