Git命令小总结

常用

  • git init git 初始化
  • git clone https://github.com/wsxx111/thisStudy.git 从远端拉下来
  • git status 查看跟踪状态
  • git status -s (喜爱简介版本)
  • git add readme.txt 添加到暂存区
  • git commit -m '新提交' 从暂存区到提交到库存
  • git commit -am'新提交' 直接略add过暂存区,提交到库存 (书上不怎么推荐)
  • git commit --amend -m '重新提交' 修复上次提交的 ,相当于 git reset head^ 了一下,又重新提交了

查看

  • git remote 查看远端仓库名
  • git remote -v 查看远端地址
  • git remote show origin 查看本地和远端分支信息

日志

  • git log 查看日志
  • git log -3 查看前3条日志 (分支下的记录,不是所有的)
  • git log -s -2 (简单版)
  • git log --graph 左边有分支图
  • git log --pretty=oneline 版本号一目了然
  • git reflog 可以查看所有分支的所有操作记录(包括(包括commit和reset的操作),包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录

分支

  • git branch 查看本地分支
  • git branch -r 查看远程分支
  • git branch -a 查看本地和远程分支
  • git branch dev 新建未存在的分支dev
  • git branch -d test 删除分支test
  • git branch -D test 当上面提示:分支有没有合并到当前分支的内容,没法删除时 就需要强制删除了,这个就是强制删除
  • git push --delete origin test 删除远端分支test
  • git branch -d -r new // 删除远程new分支
  • git checkout test 切换到已存在的分支test上
  • git checkout -b test 新建并切换test分支上,基于本地创建分支
  • git checkout -b dev origin/dev 基于远程分支创建本地分支,注意不能这么写 git checkout -b develop origin develop
  • git branch -m | -M oldbranch newbranch // 重命名分支,如果newbranch名字已经存在,需用-M强制重命名
  • 当前分支为dev, git checkout master =git checkout dev master 是dev相对于master发生的改变

  • git branch -v // 显示分支信息

  • 你在一个分支中工作,但是像获取另一个分支中的某个文件。
     git checkout <branch> -- <file>
    例如master 有个a.txt文件,现在dev分支上执行 git checkout master -- a.txt
    之后,dev分支会多一个a.txt,(是跟踪未add状态)

撤销

  • git reset --hard 撤销修改 到未修改的干净状态
  • git reset --hard head 与上面一样(对未add命令的和已add未commit的撤销到未add的未修改干净状态)
  • git reset --hard 34csdds 撤销到某个版本
  • git reset --hard head^ 撤销到未修改的干净状态的上一个提交版本
  • git reset --hard head^^ 撤销到未修改的干净状态的上两个提交版本
  • git reset --hard head~4 撤销到未修改的干净状态的上四个提交版本
  • git checkout -- readme.txt (对未add但修改了,撤销到未修改,对已经add又修改了,撤销到未修改已add状态) 去掉 -- 也是一样的(git checkout readme.txt),但建议带着 避免与切换分支产生分歧就不好了
  • git reset (等于 git reset --soft) 或者git reset head 把add暂存区里面的给撤回到未add的工作区中,注意,只是改变状态,没有改变文件里面的内容,而chekout --改变的是内容,不涉及状态
  • git reset HEAD readme.txt 撤销某文件,但不能硬撤销某文件,只能软撤销
  • git reset --hard 或者git reset --hard head 这个是回复到未修改的工作区,即未add的工作区中,和上面 git reset 还是不一样的,git reset 默认是git reset --soft

合并

  • git merge test 把test分支合并到当前分支 (合并前记得切换好分支),可以加 -m 进行解释
  • git merge --ff test 和上面一样。 --ff是指fast-forward命令。当使用fast-forward模式进行合并时,将不会创造一个新的commit节点。默认情况下,git-merge采用fast-forward模式。当前分支合并到另一分支时,如果没有分歧解决,就会直接移动文件指针。这个过程叫做fast forward。

    例如,开发一直在master分支进行,但忽然有一个新的想法,于是新建了一个develop的分支,并在其上进行一系列提交,完成时,回到 master分支,此时,master分支在创建develop分支之后并未产生任何新的commit。此时的合并就叫fast forward。master在合并develop分支的时候并没有产生新的节点,如果是--no-ff 会生成一个节点

  • git merge --no-ff -m '提交合并' 不fast-forward合并
  • git merge --abort 该命令仅仅在合并后导致冲突时才使用。git merge --abort将会抛弃合并过程并且尝试重建合并前的状态。但是,当合并开始时如果存在未commit的文件,git merge --abort在某些情况下将无法重现合并前的状态
  • git merge dev --squash 当一个合并发生时,从当前分支和对方分支的共同祖先节点之后的对方分支节点,一直到对方分支的顶部节点将会压缩在一起,使用者可以经过审视后进行提交,产生一个新的节点。

    在看到冲突以后,你可以选择以下两种方式:

    决定不合并。这时,唯一要做的就是重置index到HEAD节点。git merge --abort用于这种情况。
    解决冲突。Git会标记冲突的地方,解决完冲突的地方后使用git add加入到index中,然后使用git commit产生合并节点。
    你可以用以下工具来解决冲突:
    使用合并工具。git mergetool将会调用一个可视化的合并工具来处理冲突合并。
    查看差异。git diff将会显示三路差异(三路合并中所采用的三路比较算法)。
    查看每个分支的差异。git log --merge -p <path>
    将会显示HEAD版本和MERGE_HEAD版本的差异。
    查看合并前的版本。git show :1:文件名显示共同祖先的版本,git show :2:文件名显示当前分支的HEAD版本,git show :3:文件名显示对方分支的MERGE_HEAD版本。
    git merge test 如果有冲突,想撤销就 git reset --hard或者 git reset --hard head 就能还原到未合并前

衍合

  • git rebase master 衍合,把 从当前分支和master的最近祖先开始到当前分支的 所有提交节点 合到master之后,就是换基
  • rebase介绍

区别

  • git diff 当前工作区 与 暂存区 比较 显示add之后的变化
  • git diff --cached 或者 git diff --staged 是比较的暂存区与库存head的 ,显示的是如果要commit后,提交的新变化
  • git diff head 显示的是当前改变 与库存head的变化,包括 add的和add之后的改变 的汇总

关联

  • git clone https://github.com/wsxx111/thisStudy.git 从远端拉下来(从远端到本地的一种关联)
  • git remote add origin https://github.com/wsxx111/GGG.git 本地建立一个远端的仓库关联 注意地址要对,可以在github先建一个GGG仓库 (从本地到远端的一种关联)

拉取

  • git fetch 这将更新git remote 中所有的远程仓库 所包含分支的最新提交id, 将其记录到.git/FETCH_HEAD文件中,不包括文件
  • git fetch origin 这将名称为origin 的远程仓库上的所有branch的最新提交id,将其记录。
  • git fetch origin dev 这将这将名称为origin的远程仓库上的分支dev
  • git pull origin master 拉取远端到本地,并与本地的东西合并

    相当于执行了两步
    git fetch origin master 拉取远端到本地,不合并
    然后 git merge origin master
    这两步就是 git pull origin master 的操作

  • pull即 首先,基于本地的FETCH_HEAD记录,比对本地的FETCH_HEAD记录与远程仓库的版本号,然后git fetch 获得当前指向的远程分支的后续版本的数据,然后再利用git merge将其与本地的当前分支合并。

推送

  • git push -u origin dev 把当前的分支与远段的dev分支关联,一般用于首次推送

    或者 git push --set-upstream origin dev 这个也可以 之后的推送就可以使用 git push 就行了,同时更新的时候也可以git pull 或者 git fetch 就行了,因为已经关联了。

    也可以git branch --set-upstream dev origin/dev 实现本地和远端的分支关联

  • git push origin dev 通用的推送,把当前分支推送到远端的dev分支

其他(不想写了)

  • git stash
  • git stashlist
  • git stash apply
  • git stash pop
  • git rm test.txt
  • git merge --no-ff -m "merged bug fix 101" issue-101
  • git remote rm origin 删除远程仓库
  • git remote add origin git@github.com:wsxx111/GGG.git
  • git tag v1.0
  • git tag
  • git show v0.9
  • git tag -d v0.1 删除一个本地标签
  • git push origin v1.0 推送一个本地标签
  • git push origin --tags 一次性推送全部尚未推送到远程的本地标签

# 删除 untracked files 
git clean -f 
  

# 连 untracked 的目录也一起删掉 
git clean -fd 
  

# 连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的) 
git clean -xfd 
  

# 在用上述 git clean 前,墙裂建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删 
git clean -nxfd搜索 
git clean -nf 
git clean -nfd

posted @ 2017-09-17 15:04  凯帝农垦  阅读(204)  评论(0编辑  收藏  举报