git常用操作

参考: http://gitfaq.org/

git push:
$ git push origin test:master         // 提交本地test分支 作为 远程的master分支
$ git push origin test:test              // 提交本地test分支作为远程的test分支
如果想删除远程的分支呢?类似于上面,如果:左边的分支为空,那么将删除:右边的远程的分支

git push           //默认推送本地所有分支
解决方法:git config --global push.default current   //  git config push.default   查看
如果没有配置默认缺省的,会推送本地所有分支到远程,如果设置current这样执行git push的时候,只会push当前的branch,如果设置为matching的话,会push所有的有改动的branch到相应的repository的ref中,相对来说安全性差了点
'nothing' : Do not push anything
'matching' : Push all matching branches (default) , push all matching branches. All branches having the same name in both ends are considered to be matching. This is the default
'tracking' : Push the current branch to whatever it is tracking , deprecated synonym for upstream.
'current' : Push the current branch, push the current branch to a branch of the same name.
checkout :
git checkout ecr6798 //远程拉取分支  -b新建

$ git pull 
There is no tracking information for the current branch. 
Please specify which branch you want to merge with. 
See git-pull(1) for details 
git pull <remote> <branch> 
If you wish to set tracking information for this branch you can do so with: 
git branch --set-upstream dev_20141120 origin/<branch> 


原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接:git branch --set-upstream dev_20141120 origin/dev_20141120 

因此对于任何一个文件,在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。

1. Working Directory(工作目录)(包含.git的工作目录)

Git的工作目录是保存当前正在工作的文件所在的目录,和working tree是相同的意思。在这个目录中的文件可能会在切换branch时被GIT删除或者替换。这个目录是个临时目录,临时存储你从GIT库中取出的文件,这些文件一直会被保存,直到下次提交。

2. GIT Directory(GIT库目录)(.git的工作目录)

项目的所有历史提交都被保存在了GIT库目录中,只要你不作回滚操作,它应该不会丢失。

3. GIT Index(Git索引)

Git index 可以看作是工作目录和Git库目录之间的暂存区,和staging area是相同的意思。可以使用Git index构建一组你准备一起提交的改变。Git Index和Git Staging area是同一个意思,都是指已经被add的但尚未commit的那些内容所在的区域。最简单的查看目前什么内容在index中的方法是使用git status命令。

命令中”Changes to be committed“中所列的内容是在Index中的内容,commit之后进入Git Directory。

命令中“Changed but not updated”中所列的内容是在Working Directory中的内容,add之后将进入Index。

命令中“Untracked files”中所列的内容是尚未被Git跟踪的目录及内容,add之后进入Index。


所有用来表示项目历史信息的文件,是通过一个40个字符的(40-digit)“对象名”来索引的,对象名看起来像这样: 6ff87c4664981e4397625791c8ea3bbb5f2279a3 
你会在Git里到处看到这种“40个字符”字符串。每一个“对象名”都是对“对象”内容做SHA1哈希计算得来的,(SHA1 是一种密码学的哈希算法)。这样就意味着两个不同内容的对象不可能有相同的“对象名”。
四种类 型的对象:"blob"、"tree"、 "commit" 和"tag"。 
解决问题冲突
1)Conflict:
如有冲突(冲突--同一个文件在远程分支和本地分支里按不同  的方式被修改了);那么命令的执行输出就像下面一样 
$ git merge next
100% (4/4) done
Auto-merged file.txt
CONFLICT (content): Merge conflict in file.txt
Automatic merge failed; fix conflicts and then commit the result.
在有问题的文件上会有冲突标记,在你手动解决完冲突后就可以把此文件添 加到索引(index)中去,用git commit命  令来提交,就像平时修改了一个文件 一样。  如果你用gitk来查看commit的结果,你会看到它有两个父分支:一个指向当前 的分支,另外一个指向刚才合并进来  的分支。  解决合并中的冲突  如果执行自动合并没有成功的话,git会在索引和工作树里设置一个特殊的状态, 提示你如何解决合并中出现的冲  突。  有冲突(conflicts)的文件会保存在索引中,除非你解决了问题了并且更新了索引,否则执行git commit都会失败: 
$ git commit
file.txt: needs merge
如果执行git status 会显示这些文件没有合并(unmerged),这些有冲突的文件里面会添加像下面的冲突标识符:
<<<<<<< HEAD:file.txt 
Hello world 
======= 
Goodbye 
>>>>>>> 77976da35a11db4580b80ae27e8d65caf5208086:file.txt
你所需要的做是就是编辑解决冲突,(接着把冲突标识符删掉),再执行下面的命令: 
$ git add file.txt
$ git commit
2)git reset:
git reset [--hard|soft|mixed|merge|keep] [<commit>或HEAD]:将当前的分支重设(reset)到指定的<commit>或者HEAD(默认,如果不显示指定commit,默认是HEAD,即最新的一次提交),并且根据[mode]有可能更新index和working directory。mode的取值可以是hard、soft、mixed、merged、keep。下面来详细说明每种模式的意义和效果。 
A). --hard:重设(reset) index和working directory,自从<commit>以来在working directory中的任何改变都被丢弃,并把HEAD指向<commit>。  
B). --soft:index和working directory中的内容不作任何改变,仅仅把HEAD指向<commit>。这个模式的效果是,执行完毕后,自从<commit>以来的所有改变都会显示在git status的"Changes to be committed"中。  
C). --mixed:仅reset index,但是不reset working directory。这个模式是默认模式,即当不显示告知git reset模式时,会使用mixed模式。这个模式的效果是,working directory中文件的修改都会被保留,不会丢弃,但是也不会被标记成"Changes to be committed",但是会打出什么还未被更新的报告。报告如下:
Unstaged changes after reset:
M Test.Scala
M test.txt
)
3)git diff
working tree:就是你所工作在的目录,每当你在代码中进行了修改,working tree的状态就改变了。
index file:是索引文件,它是连接working tree和commit的桥梁,每当我们使用git-add命令来登记后,index file的内容就改变了,此时index file就和working tree同步了。
commit:是最后的阶段,只有commit了,我们的代码才真正进入了git仓库。我们使用git-commit就是将index file里的内容提交到commit中。
git diff:是查看working tree与index file的差别的。
git diff --cached:是查看index file与commit的差别的。
git diff HEAD:是查看working tree和commit的差别的。(你一定没有忘记,HEAD代表的是最近的一次commit的信息)
历史提交对比:
$ git diff commit       将所指定的某次提交与当前工作目录进行对比。
$ git diff commit1 commit2 将2次提交的内容进行对比
等价于
$ git diff commit1..commit2 如果省略任意一个commit,默认将使用HEAD代替
commit可以是简写的commit哈希值,也可是是HEAD。其中HEAD代表最后一次提交,HEAD^代表最后一次提交的父提交,HEAD~1>等价于HEAD^,HEAD~2为倒数第二次提交,以此类推。
git stash 保存当前的工作进度。会分别对暂存区和工作区的状态进行保存。 git stash list 




参考: http://gitfaq.org/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值