Git到gitHub学习之路(二):常用Git命令汇总

            Git到gitHub学习之路(二):常用Git命令汇总

一、常用配置:

配置说明:--system :#系统级别          --global :#用户全局                   --local :#单独一个项目

git config --global user.name "PennyLuo" #更新用户名为PennyLuo
git config --global user.email "xxxx@xxx.com" #邮箱
git config --global core.editor vim #编辑器
git config --global alias.st status #按这种方法,配置别名
git config -l #列举所有配置

为命令设置别名:
git config --global alias.st status
git config --global alias.co checkout
git conifg --global alias.ci commit

二、文件直接比较Different

git diff
git diff <file> #比较工作区与暂存区文件的差异
git diff --cached   # 比较暂存区和版本库差异

git diff <$id1> <$id2>   # 比较两次提交之间的差异
git diff <branch1>..<branch2> # 在两个分支之间比较
分支
git branch -r #查看远程分支
git branch -a # 列出所有本地分支和远程分支
git branch new_branch_name #新建一个分支 git branch
--merged #查看已经被合并到当前分支的分支 git branch --no-merged #查看未被合并到当前分支的分支 git checkout branch_name #切换分支 git checkout -b branch_name #创建分支并切换 git branch -d branch_name #删除分支 git branch -D branch_name #强制删除分支 git push origin :branch-name #删除远程分支(先在本地删除该分支),原理是把一个空分支push到server上,相当于删除该分支。 #从远程clone一个项目,虽然远程上该项目是有分支的,但clone下来后发现只有master分支,解决: git checkout -b not_master_branch origin/not_master_branch #本地创建一个分支,指向对应的远程分支 git pull origin not_master_branch #将远程的not_master_branch分支pull下来 git push origin not_master_branch #将修改后的not_master_branch分支push到远程的not_master_branch

三、文件的三种状态操作

#将工作区的修改提交到暂存区
git add <file>
# 添加指定目录到暂存区,包括子目录
$ git add [dir]
# 添加当前目录的所有文件到暂存区
git add . 
#------------------------------------------ 

 # 提交暂存区到仓库区
 $ git commit -m [message]

 # 提交暂存区的指定文件到仓库区
 $ git commit [file1] [file2] ... -m [message]

 # 提交工作区自上次commit之后的变化,直接到仓库区
 $ git commit -a

 # 提交时显示所有diff信息
 $ git commit -v

 # 使用一次新的commit,替代上一次提交
 # 如果代码没有任何新变化,则用来改写上一次commit的提交信息
 $ git commit --amend -m [message]

 # 重做上一次commit,并包括指定文件的新变化
 $ git commit --amend [file1] [file2] ...

#------------------------------------------
# 抛弃工作区修改(使用当前暂存区的内容状态去覆盖工作区,从而达到抛弃工作区修改的作用)
git checkout <file>  
git checkout .  

#------------------------------------------
#改变暂存区的修改(其实是重置HEAD,将指定版本库的内容状态去覆盖暂存区,从而达到暂存区的改变)
git reset <file>  #从暂存区恢复到工作区(不指定版本id,则默认为最后一次提交的版本id)
git reset .  #从暂存区恢复到工作区
git reset $id # 恢复到指定的提交版本,该$id之后的版本提交都恢复到工作区
git reset --hard $id #恢复到指定的提交版本,该$id之后的版本提交全部会被抛弃,将不出现在工作区

#注:如果不小心使用了错误的HEAD重置,会发现HEAD指向了重置的版本id,该版本之后的版本提交都不见了,使用git log也无法找到,那么怎么恢复呢?使用下面两个命令
git reflog show master | head #会显示所有的版本记录
git reset --hard $id #重新重置,至于--hard,请根据你时候将改变的内容放到工作区还是直接抛弃进行选择

#------------------------------------------
#恢复某次提交(其实是某提提交的回滚操作,不影响其他的提交,所产生的效果创建一个新版本提交去回滚将指定的提交删除,包括产生的差异文件不会出现在工作区,而是直接被抛弃)
git revert <$id>
git revert HEAD
#这里有一个很好的讲解revert与reset的差异:git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。

#------------------------------------------
#删除文件的几种方法(貌似Git2.0后有了变化)
#第一种直接在工作区删除
rm your_file #直接在工作区删除文件
git add -u . #将有改动的都提交到暂存区(包括修改的,删除的等操作),貌似git2.0 不加 -u 参数也可以
git commint -m "message" #提交版本库

#第二种方法直接在工作区删除
rm your_file #直接在工作区删除文件
git commit -am "message" #这个在前面提过,直接可以提交版本库,-a会包括包括git add/ git rm /git commint 这三个操作

#第三种方法使用git rm
git rm <file> #不仅在工作区将文件删除,同时将该删除操作提交到暂存区
git commint -m "message" #提交版本库

#关于git rm的其他补充
git rm --cached <file> #从暂存区中除去该文件,git将不再跟踪该文件的变更,但仍然在工作区内,在需要.gitignore时经常用到

四、Tag

1 git tag v1.0.0 [SHA] 
2 #打一个轻量级的tag,只是一个commit的指向引用,[SHA]是可选择值(某个commit的SHA),指定为哪个commit打tag,如果没写则直接为最后一个commit打tag
3 git tag -a v1.0.0 -m "你的附注信息" [SHA]
4 #一个带附注信息的tag,不是一个简单的引用,而是单独的一个对象,[SHA]是可选择值(某个commit的SHA),指定为哪个commit打tag,如果没写则直接为最后一个commit打tag
5 git tag #列出所有的tag
6 git show v1.0.0  #打印指定tag的信息
7 git tag -d v1.0.0 #删除本地指定tag
8 git push origin :refs/tags/v1.0.0 #删除远程tag

五、远程

创建远程库
git clone --bare git_url_path #clone的时候,将其创建成远程创库
git --bare init #初始化项目的时候,创建成远程创库

# 在当前目录新建一个Git代码库
$ git init
# 新建一个目录,将其初始化为Git代码库
$ git init [project-name]
# 下载一个项目和它的整个代码历史
$ git clone [url]
远程命令
git remote -v # 查看远程服务器地址和仓库名称
git remote show origin # 查看远程服务器仓库状态
git remote add origin git@github:robbin/robbin_site.git # 添加远程仓库地址
git remote set-url origin git@github.com:robbin/robbin #修改远程地址
git remote rm #删除远程创库地址
从远程拉取内容,提交内容到远程
git pull #=git fetch + git merge
git fetch #拉取
git merge #合并
git push # push所有分支
git push origin master # 将本地主分支推到远程主分支
git push -u origin master # 将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库)
git push origin <local_branch> # 创建远程分支, origin是远程仓库名
git push origin <local_branch>:<remote_branch> # 创建远程分支
git push origin :<remote_branch> #先删除本地分支(git br -d <branch>),然后再push删除远程分支

 六、暂存

git stash #将工作区做的修改暂存到一个git栈中
git stash list #查看栈中所有暂存
git stash apply <暂存编号> #回复对应编号暂存到工作区,如果不指定编号为栈顶的,注意:这些暂存还在栈中
git stash pop #将栈顶的暂存,恢复到工作区,并从栈中弹出
git stash clear #清空暂存栈

 七、查看信息

# 显示有变更的文件
$ git status

# 显示当前分支的版本历史
$ git log
$ git log --oneline --graph --deco
# 显示commit历史,以及每次commit发生变更的文件
$ git log --stat

# 显示某个文件的版本历史,包括文件改名
$ git log --follow [file]
$ git whatchanged [file]

# 显示指定文件相关的每一次diff
$ git log -p [file]

# 显示指定文件是什么人在什么时间修改过
$ git blame [file]

# 显示暂存区和工作区的差异
$ git diff

# 显示暂存区和上一个commit的差异
$ git diff --cached [file]

# 显示工作区与当前分支最新commit之间的差异
$ git diff HEAD

# 显示两次提交之间的差异
$ git diff [first-branch]...[second-branch]

# 显示某次提交的元数据和内容变化
$ git show [commit]

# 显示某次提交发生变化的文件
$ git show --name-only [commit]

# 显示某次提交时,某个文件的内容
$ git show [commit]:[filename]

# 显示当前分支的最近几次提交
$ git reflog

 九、撤销

# 恢复暂存区的指定文件到工作区
$ git checkout [file]

# 恢复某个commit的指定文件到工作区
$ git checkout [commit] [file]

# 恢复上一个commit的所有文件到工作区
$ git checkout .

# 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
$ git reset [file]

# 重置暂存区与工作区,与上一次commit保持一致
$ git reset --hard

# 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
$ git reset [commit]

# 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
$ git reset --hard [commit]

# 重置当前HEAD为指定commit,但保持暂存区和工作区不变
$ git reset --keep [commit]

# 新建一个commit,用来撤销指定commit
# 后者的所有变化都将被前者抵消,并且应用到当前分支
$ git revert [commit]

 

posted @ 2018-03-20 18:56  PollyLuo  阅读(88)  评论(0编辑  收藏  举报