git教程
mkdir test
创建一个目录
git init
git init 初始化这个目录
git add
这命令告诉 git 把文件添加到仓库
git add 可以反复使用,添加多个文件
git commit
把这个文件 提交到仓库
git commit -m '这次提交的描述'
git 版本回退
git status
可以让我们时刻掌握仓库当前的状态
working directory clean 告诉我们没有需要提交的修改
git diff 文件名字
---
+++
git log
-- --
git reset –hard head^
git rest 回退版本
head 表示当前版本
head^ 上一个版本
head^^ 上上个版本
如果是往上100版本 可以写成head~100
如果想回去之前的版本 可以用【git reset -hard <commit_id>】commit_id 版本号
工作区和暂存区
git add
1. 实际上就是把文件修改添加到暂存区
2. git status 可以查看一下当前文件状态
3. 平时编辑的其实是我们的工作区
4. Git管理的是修改,而不是文件,为什么这样子手呢?
第一次修改-->git add-->第二次修改-->git commit
我们提交的只是第一次修改的
Git管理的是修改,用git add命令后被放入暂存区,工作区的第二次修改并没有放入暂存区,git commit只负责把暂存区的修改提交了
撤销修改
git checkout – filename
注意上面是两个-
1. 文件在工作区的修改全部撤销
2. 两种情况
一种是修改后还没有被放到暂存区,撤销修改就回到和版本库一模一样的状态
一种是添加到暂存区后,作了修改,撤销修改就回到添加到暂存区后的状态
git reset hrad
-- <>
删除文件
rm
删除文件
git rm
从版本库中删除
git commit 提交即可
如若删错了 用 git checkout
从版本库中"一健还源"
远程版本库
申请一个远程的个人代码库 可在下面申请
http://git.oschina.net
从远程库克隆
git clone [email protected]:michaelliao/gitskills.git
git clone 是远程命令
分支管理
git checkout -b test
表示创建并切换分支
相当于下面两条命令
* git branch dev [创建一个分支]
* git checkout dev [切换分支]
gir branch
查看当前分支
当前分支前面会标一个*号
git merge dev
用于合并指定分支到当前分支
master 代表主分支
一般我们所有的开发都会在分支上,当开发完毕才会合并到住分支上
git branch -d dev
删除dev分支
如果没有合并当前要删除的分支,git会有提示,如果不需要当前分支可用git branch -D dev 去删除
主要分支语法
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
解决冲突
git merge
冲突提示语
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.
用 git status 可以告诉我们冲突在哪里
提示如下
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
# Unmerged paths:
# (use "git add/rm ..." as appropriate to mark resolution)
#
# both modified: readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
打开文件 readme.txt <<<<<<<,=======,>>>>>>>标记出不同分支的内容
删掉自己不需要的,保留自己想要的
git add
git mommit -m "解决冲突"
这样子就解决了冲突 记得不需要的分支应该删掉
查看分支合并图
git log
分支策略
合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fastforward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
--no-ff方式的git merge
git merge --no-ff -m '合并'
bug 分支
git stash
把当前工作现场“储藏”起来,等以后恢复现场后继续工作
当有一个bug 过来的时候 你需要去处理bug,但手头上的工作只进行一半。则需要储藏起来
使用git stash 后 git status 查看工作区则是干净的
这个时候可以在要修复bug的分支上创建一个临时分支【branch】去处理bug
处理完并提交,切换到要修复的bug上,合并修复的bug分支,最后删除临时bug分支即可
git stash list
查看之前储藏的所有案发现场
git stash pop
恢复某一个案发现场 恢复的同时把stash内容也删了
不填写默认是上一次的储藏
另外一种方法
一是用git stash apply恢复,但是恢复后,stash内容并不删除
二要用git stash drop来删除
远程 多人协作
git remote
查看远程库的信
当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,远程仓库的默认名称是origin。
git
git remote -v 查看抓取以及推送的地址
origin git@github.com:michaelliao/learngit.git (fetch)
origin git@github.com:michaelliao/learngit.git (push)
显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址
这个时候就要设置地址,第一次的时候设置好了,第二次就可以直接用 git push origin master 提交
git remote add origin 复制的地址 //添加到远程项目,别名为origin 添加一次即可下次可以直接跳过
git push -u origin master //把本地源码库push到github 别名为origin的远程项目中,确认提交
git push origin master
往远程库origin中推送master 主分支内容
git push origin dev 推送dev分支内容
git checkout -b dev origin/dev
你的小伙伴要在dev分支上开发,就必须创建远程origin的dev分支到本地,于是他用这个命令创建本地dev分支
修改完毕
git push origin dev 来提交
git pull origin/dev 获取git服务器最新的内容
可以这样子指定拉取的分支内容【必须确定你当前的分支就是dev】
也可以
git branch --set-upstream dev origin/dev
git pull
小结
查看远程库信息,使用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 tag v1.0
创建标签
git tag
查看所有标签
标签不是按时间顺序列出,而是按字母排序的
git show
查看标签信息
$ git show v0.1
tag v0.1
Tagger: Michael Liao .com>
Date: Mon Aug 26 07:28:11 2013 +0800
version 0.1 released
commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao .com>
Date: Tue Aug 20 15:11:49 2013 +0800
append GPL
用我们上面说的版本回退来查看刚刚版本
git reset --hard 3628164fb
小结
命令git push origin 可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d 可以删除一个本地标签;
命令git push origin :refs/tags/可以删除一个远程标签。
ssh 私钥
1、创建ssh
在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key
命令:ssh-keygen -t rsa -C "sss"
2、登陆http://git.oschina.net,打开“修改资料”,“SSH Keys”页面:
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容[这样子就可以了]
删除配置的key
1.查看是否已经有了ssh密钥:cd ~/.ssh
如果不需要 先备份,然后rm -rf ~/.ssh 即可