git常用命令

git branch

  • 查看本地分支

    1
    2
    3
    $ git branch
    * br-2.1.2.2
    master
  • 查看远程分支

    1
    2
    3
    4
    5
    $ git branch -r
    origin/HEAD -> origin/master
    origin/feature/IOS_visualtrack
    origin/feature/android_visualtrack
    origin/master
  • 查看所有分支

    1
    2
    3
    4
    5
    6
    7
    8
    $ git branch -a
    * br-2.1.2.2
    master
    remotes/origin/HEAD -> origin/master
    remotes/origin/br-2.1.2.1
    remotes/origin/br-2.1.2.2
    remotes/origin/br-2.1.3
    remotes/origin/master
  • PS: git branch -r 无法获取远程分支,ui可以看见分支但是git 命令无法查看
    原因 git branch -a 这条命令并没有每一次都从远程更新仓库信息,我们可以手动更新一下

    1
    2
    git fetch origin 
    git branch -a
  • 切换分支

    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ git branch -a
    * master
    remotes/origin/HEAD -> origin/master
    remotes/origin/Release
    remotes/origin/master

    $ git checkout -b myRelease origin/Release
    Branch myRelease set up to track remote branch Release from origin.
    Switched to a new branch 'myRelease'
  • 合并分支
    合并前要先切回要并入的分支
    以下表示要把issue1234分支合并入master分支

    1
    2
    3
    4
    5
    $: git checkout master
    $: git merge issue1234
    Merge made by recursive.
    README | 1 +
    1 files changed, 1 insertions(+), 0 deletions(-)
  • 撤消上一次commit的内容(该操作会彻底回退到某个版本,本地的源码也会变为上一个版本的内容)

    1
    git reset --hard <commit-id>
  • git commit -m 注释换行
    git commit -m 注释可以通过单引号来换行,比如:

    1
    2
    3
    4
    5
    6
    7
    $ git commit -m '
    > 1.aaaaa
    > 2.bbbb
    > '
    [master b25154b] 1.aaaaa 2.bbbb
    1 file changed, 0 insertions(+), 0 deletions(-)
    create mode 100644 ss.txt
  • 通过git commit –amend 命令可以查看到刚刚的log信息为

    1
    2
    1.aaaaa
    2.bbbb

git diff

  • 工作目录 vs 暂存区

    1
    2
    3
    git diff <filename>
    意义:查看文件在工作目录与暂存区的差别。如果还没 add 进暂存区,则查看文件自身修改前后的差别。也可查看和另一分支的区别。
    git diff <branch> <filename>
  • 暂存区 vs Git仓库

    1
    2
    3
    git diff --cached <filename>
    意义:表示查看已经 add 进暂存区但是尚未 commit 的内容同最新一次 commit 时的内容的差异。 也可以指定仓库版本
    git diff --cached <commit> <filename>
  • 工作目录 vs Git仓库

    1
    2
    git diff <commit> <filename>
    意义:查看工作目录同Git仓库指定 commit 的内容的差异。<commit>=HEAD 时:查看工作目录同最近一次 commit 的内容的差异。
  • Git仓库 vs Git仓库

    1
    2
    git diff <commit> <commit>
    意义:Git仓库任意两次 commit 之间的差别。
  • 扩展:
    以上命令可以不指定 ,则对全部文件操作。
    以上命令涉及和 Git仓库 对比的,均可指定 commit 的版本。
    HEAD 最近一次 commit
    HEAD^ 上次提交
    HEAD~100 上100次提交
    每次提交产生的哈希值

git reset

  • git reset –soft
    将HEAD引用指向给定提交。索引(暂存区)和工作目录的内容是不变的,在三个命令中对现有版本库状态改动最小。

  • git reset –mixed(git reset默认的模式)
    HEAD引用指向给定提交,并且索引(暂存区)内容也跟着改变,工作目录内容不变。这个命令会将索引(暂存区)变成你刚刚暂存该提交全部变化时的状态,会显示工作目录中有什么修改。

  • git reset –hard
    HEAD引用指向给定提交,索引(暂存区)内容和工作目录内容都会变给定提交时的状态。也就是在给定提交后所修改的内容都会丢失(新文件会被删除,不在工作目录中的文件恢复,未清除回收站的前提)。

avatar

git rebase

  • git pull –rebase
    如果远程git服务器仓库分支已经有了更新上,通常git pull时候将会默认执行merge合并提交。相当于执行两个操作
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    git fetch origin
    git merge origin/master

    实际上除了合并外还有一种方法,那就是执行rebase来同步变化,它通常更有用,git提交历史也更清晰,
    rebase方法需要显性指定--rebase参数:

    git pull --rebase ,他相当执行:
    git fetch origin
    git rebase origin/master

    合并方法更简单,更容易理解。但是很多时候我们更需要的是rebase,我们也可以通过设置,设置rebase为
    pull时候默认执行的动作:git config --global pull.rebase true