git命令全剖析

Git 是一个很强大的分布式版本控制系统。它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势。
Git常用操作命令:
$ git clone git://github.com/jquery/jquery.git 检出仓库
$ git remote -v 查看远程仓库
$ git status 查看当前状态 
$ git branch 查看本地分支
$ git branch -r 查看远程分支
$ git branch [name] 创建本地分支--注意新分支创建后不会自动切换为当前分支
$ git branch branch_0.1 master 从主分支master创建branch_0.1分支
$ git branch -m name newname 将name重命名为newname
$ git branch -d  删除某个分支  
$ git branch -D  强制删除某个分支 (未被合并的分支被删除的时候需要强制) 
$ git checkout [name] 切换分支
$ git checkout -b [name] 创建新分支并立即切换到新分支
$ git fetch先更新    再  git checkout -b [本地分支] origin/[远程分支]  将远程分支映射到本地命名

$ git fetch <远程主机名> <分支名>
$ git fetch 相当于是从远程获取最新版本到本地,不会自动merge
$ git fetch origin # 获取远端库最新信息
$ git difforigin/  # 然后和远程分支做比较

$ git merge [name] 合并分支: ----将名称为[name]的分支与当前分支合并

$ git pull <远程主机名> <远程分支名>:<本地分支名>
$ git pull origin [name]  拉取远程分支更新并合并
$ git push <远程主机名> <本地分支名>:<远程分支名>
$ git push origin [name] 推送本地分支并合并到远程[name]分支(如果远程没有则创建远程分支)
$ git push origin :[name] 删除远程分支
$ git commit -a -m "log_message"     (-a是提交所有改动,-m是加入log信息) 本地修改同步至服务器端 :
$ git push origin   # 创建远程分支, origin是远程仓库名  
$ git push origin:  # 创建远程分支  
$ git push origin :  #先删除本地分支(git br -d),然后再push删除远程分支
$ git push -f origin  强行覆盖线上的分支,这样就不会造成线性的log记录错误 

git add      # 将工作文件修改提交到本地暂存区  
git add .           # 将所有修改过的工作文件提交暂存区  
git rm       # 从版本库中删除文件  
git rm--cached  # 从版本库中删除文件,但不删除文件
git reset 回滚add操作
git reset    # 从暂存区q恢复到工作文件  
git reset -- .      # 从暂存区恢复到工作文件

git reset --hard    # 恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改
相当于回滚哦<针对暂缓区>
git reset --hard 66fe1b37e3dbbf5c9f13b46bdf2d3ebe71534ff2
git reset HEAD      # 命令用于取消已缓存的内容git reset HEAD -- hello.php  
git push origin master --force 最后必须强制推送
生成新的commit,原来的会保留。代码也会生成对用的版本,这是跟reset最大的区别<针对版本号>
git revert <$id>    # 撤销某次版本的操作
git revert HEAD     # 恢复最后一次提交的状态
查看文件diff
git diff     # 比较当前文件和暂存区文件差异  
git diff  
git diff <$id1> <$id2>   # 比较两次提交之间的差异  
git diff [branchA] [branchB] # 在两个分支之间比较  
git diff --staged   # 比较暂存区和版本库差异  
git diff --cached   # 比较暂存区和版本库差异  
git diff --stat     # 仅仅比较统计信息  
查看提交记录
git log  
git log      # 查看该文件每次提交记录  
git log -p   # 查看每次详细修改内容的diff  
git log -p -2       # 查看最近两次详细修改内容的diff  
git log --stat      #查看提交统计信息 

暂存代码不提交切换分支
git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。 

版本(tag)操作相关命令
查看版本:$ git tag
创建版本:$ git tag [name]
删除版本:$ git tag -d [name]
查看远程版本:$ git tag -r
创建远程版本(本地版本push到远程):$ git push origin [name]
删除远程版本:$ git push origin :refs/tags/[name]
合并远程仓库的tag到本地:$ git pull origin --tags
上传本地tag到远程仓库:$ git push origin --tags
创建带注释的tag:$ git tag -a [name] -m 'yourMessage'

忽略一些文件、文件夹不提交
在仓库根目录下创建名称为“.gitignore”的文件,写入不需要的文件夹名或文件,每个元素占一行即可,如
target
bin
*.db

# 删除 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


.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的

git update-index --assume-unchanged application/database.php