git学习笔记

来源:互联网 发布:明星服装店淘宝店 编辑:程序博客网 时间:2024/05/21 06:22

本文原创,转载请注明:http://blog.csdn.net/j903829182/article/details/38077927

$ pwd

pwd命令用于显示当前目录


第一步,用命令git add告诉Git,把文件添加到仓库:
$ git add readme.txt
第二步,用命令git commit告诉Git,把文件提交到仓库:
$ git commit -m "wrote a readme file"


$ git status
git status命令可以让我们时刻掌握仓库当前的状态


$ git diff readme.txt 
能看看具体修改了什么内容,自然是很好的。比如你休假两周从国外回来,
第一天上班时,已经记不清上次怎么修改的readme.txt,所以,需要用git diff这个命令看看
git diff顾名思义就是查看difference,显示的格式正是Unix通用的diff格式,
可以从上面的命令输出看到,我们在第一行添加了一个“distributed”单词。


$ git log
版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log命令查看:
git log命令显示从最近到最远的提交日志
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上?--pretty=oneline参数:
$ git log --pretty=oneline


在Git中,用HEAD表示当前版本,也就是最新的提交“ 3628164...882e1e0”(注意我的提交ID和你的肯定不一样),
上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,
所以写成HEAD~100。
现在,我们要把当前版本“append GPL”回退到上一个版本“add distributed”,就可以使用git reset命令:
$ git reset --hard HEAD^
$ git reset --hard 3628164




$ cat readme.txt    看看readme.txt的内容


Git提供了一个命令git reflog用来记录你的每一次命令
当你用$ git reset --hard HEAD^回退到“add distributed”版本时,
再想恢复到“append GPL”,就必须找到“append GPL”的commit id
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。


提交后,用“git diff HEAD -- readme.txt”命令可以查看工作区和版本库里面最新版本的区别:
$ git diff HEAD -- readme.txt


命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:


一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;


一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。


总之,就是让这个文件回到最近一次git commit或git add时的状态。


git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区:
$ git reset HEAD readme.txt




还记得如何丢弃工作区的修改吗?
$ git checkout -- readme.txt




你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:
$ rm test.txt
这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,
git status命令会立刻告诉你哪些文件被删除了:
现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且commit:
$ git rm test.txt
$ git commit -m "remove test.txt"
另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
$ git checkout -- test.txt
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。






$ git remote add origin git@github.com:michaelliao/learngit.git
请千万注意,把上面的michaelliao替换成你自己的GitHub账户名,否则,你在本地关联的就是我的远程库,
关联没有问题,但是你以后推送是推不上去的,因为你的SSH Key公钥不在我的账户列表中。


添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,
但是origin这个名字一看就知道是远程库。
下一步,就可以把本地库的所有内容推送到远程库上:
$ git push -u origin master
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。


从现在起,只要本地作了提交,就可以通过命令:
$ git push origin master
把本地master分支的最新修改推送至GitHub,现在,你就拥有了真正的分布式版本库!


要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
关联后,使用命令git push -u origin master第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;




用命令git clone克隆一个本地库:
$ git clone git@github.com:michaelliao/gitskills.git








首先,我们创建dev分支,然后切换到dev分支:
$ git checkout -b dev
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev
然后,用git branch命令查看当前分支:
$ git branch
git branch命令会列出所有分支,当前分支前面会标一个*号。
dev分支的工作完成,我们就可以切换回master分支:
$ git checkout master
现在,我们把dev分支的工作成果合并到master分支上:
$ git merge dev
git merge命令用于合并指定分支到当前分支


合并完成后,就可以放心地删除dev分支了:
$ git branch -d dev
查看分支:git branch


创建分支:git branch name


切换分支:git checkout name


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


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


删除分支:git branch -d name


带参数的git log也可以看到分支的合并情况
$ git log --graph --pretty=oneline --abbrev-commit




Git会用“Fast forward”模式,但这种模式下,删除分支后,会丢掉分支信息。


如果要强制禁用“Fast forward”模式,Git就会在merge时生成一个新的commit,
这样,从分支历史上就可以看出分支信息。
准备合并dev分支,请注意--no-ff参数,表示禁用“Fast forward”:
$ git merge --no-ff -m "merge with no-ff" dev
在实际开发中,我们应该按照几个基本原则进行分支管理:


首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;


那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,
再把dev分支合并到master上,在master分支发布1.0版本;


你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。


所以,团队合作的分支看起来就像这样:


Git分支十分强大,在团队开发中应该充分应用。


合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,
而fast forward合并就看不出来曾经做过合并。




Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:
$ git stash
刚才的工作现场存到哪去了?用git stash list命令看看:
$ git stash list
工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了:
$ git stash pop
你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:
$ git stash apply stash@{0}
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;


当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。








个分支还是必须就地销毁:
$ git branch -d feature-vulcan
销毁失败。Git友情提醒,feature-vulcan分支还没有被合并,如果删除,将丢失掉修改,如果要强行删除,
需要使用命令git branch -D feature-vulcan。
现在我们强行删除:
$ git branch -D feature-vulcan
开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D name强行删除。








要查看远程库的信息,用git remote:
$ git remote
或者,用git remote -v显示更详细的信息:
$ git remote -v
推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,
Git就会把该分支推送到远程库对应的远程分支上:
$ git push origin master
如果要推送其他分支,比如dev,就改成:
$ git push origin dev
但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?


master分支是主分支,因此要时刻与远程同步;


dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;


bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;


feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。


总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!






克隆:$ git clone git@github.com:michaelliao/learngit.git
你的小伙伴要在dev分支上开发,就必须创建远程origin的dev分支到本地,于是他用这个命令创建本地dev分支:
$ git checkout -b dev origin/dev
你的小伙伴已经向origin/dev分支推送了他的提交,而碰巧你也对同样的文件作了修改,并试图推送:
推送失败,因为你的小伙伴的最新提交和你试图推送的提交有冲突,解决办法也很简单,Git已经提示我们,
先用git pull把最新的提交从origin/dev抓下来,
然后,在本地合并,解决冲突,再推送:
$ git pull
git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,
设置dev和origin/dev的链接:
$ git branch --set-upstream dev origin/dev
再pull:
$ git pull
这回git pull成功,但是合并有冲突,需要手动解决,解决的方法和分支管理中的解决冲突完全一样。
解决后,提交,再push:




因此,多人协作的工作模式通常是这样:


首先,可以试图用git push origin branch-name推送自己的修改;


如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;


如果合并有冲突,则解决冲突,并在本地提交;


没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!


如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,
用命令git branch --set-upstream branch-name origin/branch-name。


这就是多人协作的工作模式,一旦熟悉了,就非常简单。




查看远程库信息,使用git remote -v;


本地新建的分支如果不推送到远程,对其他人就是不可见的;


从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;


在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;


建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;


从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。






在Git中打标签非常简单,首先,切换到需要打标签的分支上:
$ git branch
$ git checkout master
然后,敲命令git tag name就可以打一个新标签:
$ git tag v1.0
可以用命令git tag查看所有标签:
$ git tag


默认标签是打在最新提交的commit上的。有时候,如果忘了打标签,比如,现在已经是周五了,
但应该在周一打的标签没有打,怎么办?


方法是找到历史提交的commit id,然后打上就可以了:
比方说要对“add merge”这次提交打标签,它对应的commit id是“6224937”,敲入命令:
$ git tag v0.9 6224937
注意,标签不是按时间顺序列出,而是按字母排序的。可以用git show tagname查看标签信息:


还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:
$ git tag -a v0.1 -m "version 0.1 released" 3628164


命令git tag name用于新建一个标签,默认为HEAD,也可以指定一个commit id;


-a tagname -m "blablabla..."可以指定标签信息;


-s tagname -m "blablabla..."可以用PGP签名标签;


命令git tag可以查看所有标签


如果标签打错了,也可以删除:
$ git tag -d v0.1
如果要推送某个标签到远程,使用命令git push origin tagname:
$ git push origin v1.0
或者,一次性推送全部尚未推送到远程的本地标签:
$ git push origin --tags


如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
$ git tag -d v0.9
然后,从远程删除。删除命令也是push,但是格式如下
$ git push origin :refs/tags/v0.9




让Git显示颜色,会让命令输出看起来更醒目:
$ git config --global color.ui true


原文来自:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001373962845513aefd77a99f4145f0a2c7a7ca057e7570000


eclipse中配置git:  http://blog.csdn.net/hhhccckkk/article/details/10458159
eclipse+git:  http://blog.csdn.net/student_2008/article/details/17118607


使用eclipse(myeclipse)的git:

1.右击项目名--〉team--〉share project--〉git--〉next----〉选择user or replace repository。。--〉create仓库的--〉finish




2.创建好远程的git服务器库,比如在开源中国中的git服务器

3.首次要把项目提交到本地库

选择项目名---〉team---〉commit

4.选择项目名--〉team----〉remote  ---〉push---〉填写url----〉next





选择refs/heads/master   点击add  specification

选择force update---〉next  or  finish就可以了,提交到git管理的服务器了

可以到git管理服务器看看,已经有提交了的内容了























0 0
原创粉丝点击