git常用命令

克隆

1
git clone git@github.com:michaelliao/bootstrap.git

指定分支克隆

1
git clone -b vip-mybatis http://git.gupaoedu.com/vip/gupao-springmvc

更新代码

1
git pull origin master

提交到缓冲区

1
git add xxx

提交到本地仓库

1
git commit -m '修改xxbug'

覆盖commit

覆盖上一次的提交,可以修改提交信息,不会产生新的提交

在没push之前是有效的,如果已经push了,那么需要merge自己的分支

1
git commit --amend

回退有版本

1
2
git revert --试用已经推送远程的情况,会产生新的提交
git revert HEAD

参考:https://blog.csdn.net/sinat_29774479/article/details/78599702

查看历史命令

1
git reflog

推送到远程仓库 (push 所有的commit)

1
git push <远程主机名> <远程分支名>

查看当前状态

1
git status

查看日志

1
2
3
4
5
6
git log
git log --graph --pretty=oneline --abbrev-commit <filename>
git -p log <filename> 显示文件内容的diff
git log --stat --带文件修改的列表
git log master origin/master --比较本地和remote的差异commit,需要先git fetch
git log -p master origin/master --显示差异commit的详细内容

参考:https://www.cnblogs.com/qiu-Ann/p/7902855.html

git diff

查看工作区和暂存区的区别

1
$ git diff

不要频繁的commit,一个commit只做一件事件,先用git add -p来review将要暂存的内容是否合理

.gitignore规则不生效

1
2
3
git rm -r --cached .
git add .
git commit -m 'update .gitignore'

参考:https://www.cnblogs.com/zhangxiaoliu/p/6008038.html

添加新的远程仓库并推送

1
2
3
4
git remote add github https://github.com/liuchsh/zbdw.git
git push -u github master
git remote -v
git remote show origin

![image-20181106184840280](/Users/liuchunshan/Library/Application Support/typora-user-images/image-20181106184840280.png)

创建与合并分支

1
2
3
4
5
6
7
8
9
10
11
查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

分支管理策略

image-20181107105959441

多人协作

1
2
在本地创建和远程分支对应的分支(创建本地分支),使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致
建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name

查看当前git用户信息

1
2
git config user.name
git config user.email

修改git用户信息

1
2
git config [--global] user.name “liuchunshan”
git config [--global] user.email "819547704@qq.com"

stash功能

1
2
3
4
5
6
git stash 
git stash list
git stash apply
git stash pop --如果有冲突,git会提示,解决冲突的文件,然后提交,再删除没用的stash
git stash drop stash@{0}
git stash clear --清除所有stash

参考:https://www.cnblogs.com/juandx/p/5362723.html

修改bug可以从master上分支

把本地未push的分叉提交历史整理成直线

1
2
git rebase  --慎用
git pull --rebase

参考:https://www.cnblogs.com/lakeone/p/4555464.html

git撤销

1
2
3
4
5
git reset HEAD 如果后面什么都不跟的话 就是上一次add 里面的全部撤销了 
git reset HEAD XXX/XXX/XXX.java 就是对某个文件进行撤销了
git reset HEAD <filename> 是从暂存区撤销到工作区(unstage)
git checkout -- <filename> 是撤销工作区的内容,回到最近一次的git commit或git add时的状态
$ git reset origin/master --还原到远程最新的状态

回退没版本

1
2
3
4
git reset
git reset --hard HEAD^^ --回退到上上个版本
^为偏移符号 上边命令标识 回退到HEAD指向往前数两个commit,或者可以使用~符号,~2
git reset --hard origin/master --reset到origin的master分支

git reset 默认是 –soft ,就是不回退暂存区的修改,

使用 –hard 就连暂存区的修改也回退了。

–mixed 是啥意思?

https://www.cnblogs.com/flowwind/p/4222247.html

  1. —hard:重置位置的同时,清空工作目录的所有改动;
  2. --soft:重置位置的同时,保留工作目录和暂存区的内容,并把重置 HEAD 的位置所导致的新的文件差异放进暂存区。
  3. --mixed(默认):重置位置的同时,保留工作目录的内容,并清空暂存区。

​ git reset 用来重置暂存区,git revert 用来逆转已经提交的commit,会产出新的commit(Revert “…”)

工作区和暂存区的内容,应该是不会影响本地仓库和远端仓库的同步的。

​ git在工作区和暂存区是以文件为单位的操作的,如果不想提交某个文件,就不要把它添加到暂存区(git add), 一旦commit了,后边的维护就是以commit为单位了。

​ HEAD是个指针,它会指向某个branch、tag,branch、tag会指向某个具体的commit,HEAD应该也可以直接指向某个具体的commit。

撤销commit

https://www.cnblogs.com/lfxiao/p/9378763.html

统计文件的改动

1
git diff --stat master origin/master

查看暂存区和上一条commit的区别

1
git diff --staged

查看最近两次提交的内容差异

1
2
git log -p -2
git log -p

查看某个commit的内容

1
2
git show commit-id
git show commit-id filename

查看ref与提交的关联关系

1
$ git show master

建立标签

1
2
3
4
5
6
7
8
git tag <tagname> <commitid>
git tag -a <tagname> -m "message"
git show <tagname>
git tag
git push origin <tagname>
git push origin --tags
git tag -d <tagname>
git push origin :refs/tags/<tagname>

下载新的分支

1
2
$ git pull origin dev
$ git checkout -b dev origin/dev

git合并主干的操作方式

  1. gitlab提交pull request

  2. 直接使用merge合并到主干。

    注意使用的账号权限