Git的简介:
Git是目前世界上最先进的分布式版本控制系统。区别于集中式svn和cvs,分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库。特点:不需要联网、安全性高、速度快、协作更便捷。
一、创建版本库:
mkdir learngit 新建一个目录
cd learngit 跳转到这个目录下git init 把这个目录变成Git可以管理的仓库
编写readme.txt文件放在learngit目录
git add readme.txt 把文件添加到仓库
git commit -m "wrote a readme file" 告诉Git,把文件提交到仓库
git status 命令看仓库当前的状态
git diff readme.txt 看具体修改内容
总结:
随时掌握工作区的状态,使用git status命令。
如果git status告诉你有文件被修改过,用git diff可以查看修改内容。
二、版本回退和管理修改
git log --pretty=oneline 简化记录显示
一大串类似3628164...882e1e0的是commit id(版本号)
用HEAD表示当前版本
上一个版本就是HEAD^,上上一个版本就是HEAD^^,
当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
git reset --hard HEAD^ 回退上一版本
git reset --hard (commit id)(版本号)
cat readme.txt 显示内容
忘记commit id可用relog查
git reflog 用来记录你的每一次命令
git diff HEAD -- readme.txt 命令可以查看工作区和版本库里面最新版本的区别
总结:
每次修改,如果不add到暂存区,那就不会加入到commit中
三、撤销修改和删除文件
git reset HEAD file 可以把暂存区的修改撤销掉(unstage),重新放回工作区
总结:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
git rm 用于删除一个文件
ls -ah 查看隐藏目录
ssh-keygen -t rsa -C "[email protected]" 创建SSH Key,一路回车
成功后,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件
id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人
https://github.com/settings/keys 谷歌浏览器打开
在这个网站中添加SSH keys 用id_rsa.pub公钥。
使用SSH Key是因为GitHub需要识别出你推送的提交确实是你推送的
本地仓库关联远程库heshushun/learngit.git,远程库的名称:origin
git remote add origin [email protected]:heshushun/learngit.git
把本地库的所有内容推送到远程库上
git push -u origin master 把当前分支master推送到远程,并将本地master和远程master关联
git push origin master 后面推送远程不需要再加-u
从远程库克隆到本地库
git clone [email protected]:heshushun/gitskills.git
git checkout -b dev 创建dev分支,然后切换到dev分支
git checkout命令加上-b参数表示创建并切换
git branch 命令查看当前分支
git checkout master 切换回master分支
git merge dev 把dev分支的工作成果合并到master分支上
git branch -d dev 删除dev分支
因为创建、合并和删除分支非常快,所以Git鼓励使用分支完成某个任务,合并后再删掉分支
总结:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
git log --graph 命令可以看到分支合并图。
git stash 可以把当前工作现场“储藏”起来
git merge --no-ff -m "merged bug fix 101" issue-101 合并
git stash list 命令查看刚才的工作现场
git stash apply恢复 但是恢复后,stash内容并不删除
git stash pop 恢复工作现场的同时把stash内容也删了
git branch -D feature-vulcan 强行删除分支 -D
git branch -d feature-vulcan 如果分支修改没有合并是不能删除的
git remote 查看远程库的信息 git remote -v 看更详细
git push origin dev 推送 dev分支
git checkout -b dev origin/dev 其他本地仓库想再dev上开发,需创建远程origin的dev分支到本地
git commit -m "add /usr/bin/env"
git push origin dev 修改后 push到远程
若对方提交,你也提交同文件会冲突,会推送失败。
可先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送
git pull 将origin/dev抓下来
如果失败,因为没有指定本地dev分支与远程origin/dev分支的链接
git branch --set-upstream dev origin/dev 设置dev和origin/dev的链接:
然后再pull,本地合并解决冲突后,再push
git tag v1.0 新建标签v1.0
git log --pretty=oneline --abbrev-commit 找历史提交的commit id
git tag v0.9 692fdc3 指定 692fdc3 commit id 的标签是v0.9
git show v0.9 查看标签信息
git tag -d v0.9 删除标签
git push origin v1.0 推送某个标签到远程
git push origin :refs/tags/v0.9 删除一个远程标签