Git命令实战总结
来源:互联网 发布:淘宝4星怎么贷款 编辑:程序博客网 时间:2024/06/04 23:34
$ git config --global uer.name "CareChere"
$ git config --global user.email "xxxxxxxxxxx@qq.com"
cd E:\workspace
$mkdir learnGit
$cd learnGit
$pwd
$ git init 生成仓库
$ls -ah 显示隐藏的目录
$git add readme.txt
$git commit -m "wrote a readme file"
$git status
$git diff readme.txt
$ git add readme.txt
$git status
$ git commit -m "add distributed"
$git status
$git log
$ git log --pretty=oneline
需要友情提示的是,你看到的一大串类似3628164...882e1e0
的是commit id
(版本号),和SVN不一样,Git的commit id
不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id
和我的肯定不一样,以你自己的为准。为什么commit id
需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。
$ git reset --hard HEAD^
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD
表示当前版本,也就是最新的提交3628164...882e1e0
(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。
$ cat readme.txt
$git log
最新的那个版本new add
已经看不到了!好比你从21世纪坐时光穿梭机来到了19世纪,想再回去已经回不去了,肿么办?
办法其实还是有的,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个append GPL
的commit id
是3628164...
,于是就可以指定回到未来的某个版本:
$cat readme.txt
$git reflog 记录每一次命令
$git diff HEAD -- readme.txt 查看工作区和版本库里面最新版本的区别
$git checkout -- readme.txt
命令git checkout -- readme.txt
意思就是,把readme.txt
文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit
或git add
时的状态。
git checkout -- file
命令中的--
很重要,没有--
,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到到git checkout
命令。
$git reset HEAD readme.txt用命令git reset HEAD file
可以把暂存区的修改撤销掉(unstage),重新放回工作区
git reset
命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD
时,表示最新的版本。
$rm text.txt
现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm
删掉,并且git commit
$git rm text.txt
$git commit -m "remove text.txt" 现在,文件就从版本库中被删除了。
另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
$git checkout -- text.txt
git checkout
其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
完全可以自己搭建一台运行Git的服务器,不过现阶段,为了学Git先搭个服务器绝对是小题大作。好在这个世界上有个叫GitHub的神奇的网站,从名字就可以看出,这个网站就是提供Git仓库托管服务的,所以,只要注册一个GitHub账号,就可以免费获得Git远程仓库。
在继续阅读后续内容前,请自行注册GitHub账号。由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:
第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa
和id_rsa.pub
这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
$ssh-keyan -t rsa -C "xxxxxxxxx@qq.com"
学习的是廖雪峰老师的Git教程,http://www.liaoxuefeng.com/ 。
这里整理下学习笔记供自己以后查阅,希望完整学习git的请到上面的网站找Git教程,很好的学习资料。
创建版本库:git init
(1) 添加文件到Git仓库:
第一步:git add <file> 添加文件到暂存区。
第二步:git commit -m “提交说明” 提交到工作区。
(2) 查看Git仓库状态:
git status 查看仓库当前状态
git diff 查看具体修改内容
git log 查看提交日志,加上--pretty=oneline在一行内显示一次提交,加上 --graph可以看到分支图。
git reflog 查看命令历史
(3) 版本回退:
git reset --hard commit_id回退到指定版本
(commit_id即指定的版本号,其中HEAD表示当前版本,HEAD^是上一版本,HEAD^^是上上个版本,HEAD~100是往上100个版本。)
撤销修改:
1.git checkout --file丢弃某个文件的修改,前提是该文件没添加到暂存区。(git checkout用版本库里的版本替换工作区的版本。可以用于撤销工作区的删除和修改。)
2.要撤销已经添加到缓存区的文件的修改,先git reset HEAD file把暂存区的修改撤销,再用git checkout --file丢弃工作区上文件的修改。
3.对已经提交的修改,直接回退到修改前的版本。
(4) 删除文件:
从版本库删除文件:git rm file删除,并git commit
(5) 远程库:
使用Github的git托管服务:
需要在github账号上创建SSH key,这是因为本地git仓库和Github仓库的文件传输是通过SSH加密的,Github通过SSH公钥识别推送的来源。一个Github账号可以添加多个SSH key,与多台设备协同工作。
关联一个远程库:
将本地仓库的内容推送到远程库上。
1. 首先在GitHub账号上创建一个新的仓库。
2. 在本地仓库上用命令:git remote add origin git@server-name:path/repo-name.git
关联远程库。
3. 第一次推送master分支的所有内容:git push -u origin master
之后的推送:git push origin master
第一次推送会引发SSH警告,只要确定就好了。
创建一个远程仓库的正确姿势:
1.在GitHub账号上创建一个新的仓库。
2.克隆远程仓库到本地:git clone git@server-name:path/repo-name.git
这里的地址格式是ssh支持的原生git协议,是比较快的一种。当然我们也可以用https协议。就是git远程仓库在网页上的地址。
(6) 分支的使用:
git branch 查看分支
git branch <name> 创建分支
git checkout <name> 切换分支
git checkout -b <name> 创建+切换分支
git merge <name> 合并某分支到当前分支
git branch -d <name> 删除分支
(7) 冲突的解决:
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
用git log --graph命令可以看到分支合并图。
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
(8) 暂存管理:
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除分支。
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop(相当于用git stash apply恢复,再用git stash drop来删除),回到工作现场。
git stash list可以用于查看保存的工作现场,可以多次保存,当需要恢复的时候,需要指定恢复的stash,命令如: git stash apply stash@{0}。
开发一个新功能,最好新建一个分支。如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
(9) 向远程库推送文件:
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建立本地分支和远程分支的关联。
(10) 标签管理:
创建标签:
git tag <name> [commit_id] 新建一个标签,默认为HEAD,也可以指定一个commit id;
git tag -a <tagname> -m "说明信息" 指定标签信息;
git tag -s <tagname> -m "说明信息" 用PGP签名标签;
git tag 查看所有标签。
git push origin <tagname> 推送一个本地标签;
git push origin --tags 推送全部未推送过的本地标签;
删除标签:
git tag -d <tagname> 删除一个本地标签;
git push origin :refs/tags/<tagname> 删除一个远程标签。
(11) 使用GitHub为别人的开源库贡献代码:
在GitHub上,可以任意Fork开源仓库;
自己拥有Fork后的仓库的读写权限;
3可以推送pull request给官方仓库来贡献代码。
(12) 忽略特殊文件:
忽略某些文件时,需要编写.gitignore.
.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理。
- Git命令实战总结
- git 命令学习实战
- [GIT] git应用 命令总结
- GIT项目操作实战总结
- git 命令总结
- git命令 学习总结
- git命令总结
- Git 命令总结
- git命令总结
- git命令总结
- git 命令总结
- git命令使用总结
- 常用Git命令总结
- git命令总结
- git 命令总结
- git命令使用总结
- git命令总结
- git命令总结下
- opencv contours的问题
- C#中的@符号用法
- 【leetcode】27. Remove Element
- 属性动画
- 介绍一个二次排序的小技巧(best coder27期1001jump jump jump)
- Git命令实战总结
- 杭电OJ BestCoder28期1001Missing number问题(小技巧偏移法)
- iOS RSA加密和解密
- wordpress文章导入csdn
- 内存泄漏与内存溢出的区别
- 导航条下 ScrollView 第一个View去掉向下偏移的64px
- 【bzoj3522】【poi2014】【hotel】【树形dp】
- 数据库字段为Date类型,插入操作时如何set值存入数据库。
- Android自定义控件