Git学习记录
2015-09-24 22:15
351 查看
之前认真的学过git,最近一直在学习其他的,没怎么用git,都有点生疏了,今天来复习一下git,加之之前学git也没有做笔记
首先讲一下工作区和暂存区,
工作区:主机上的工作目录,例如创建的一个项目目录。工作区中有一个隐藏目录
Git的版本库中存了很多东西,其中最重要的就是成为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针HEAD,如下图
把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
配置git用户信息
初始化一个git仓库
增加一个文件到仓库
查看当前仓库状态
从现有仓库克隆
忽略某些文件,编辑.gitignore文件
比较当前文件与暂存区域快照之间的差异,也就是修改之后还没暂存起来的变化内容
移除,移动文件
查看提交历史
取消已经暂存的修改
取消对文件的修改
版本回退
记录每一次命令
关联远程仓库
推送本地库内容
创建分支
合并分支
删除分支
保存当前工作现场
在本地创建和远程分支对应的分支
建立本地分支和远程分支的关联
抓取远程分支
创建一个标签
忽略特殊文件
创建.gitignore文件,编写对应规则
配置别名
查看远程仓库信息
[未完待续]~~
首先讲一下工作区和暂存区,
工作区:主机上的工作目录,例如创建的一个项目目录。工作区中有一个隐藏目录
.git,它不算工作区,而是git的版本库。
Git的版本库中存了很多东西,其中最重要的就是成为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针HEAD,如下图
把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
配置git用户信息
$ git config --global user.name "henulwj" $ git config --global user.email "henulwj@qq.com"
初始化一个git仓库
$ mkdir mygit $ cd mygit $ git init
增加一个文件到仓库
$ touch reviewgit.md $ git add reviewgit.md $ git commit -m "add reviewgit.md file"
$ git commit -a -m "add reviewgit.md file" #不用再执行git add了
查看当前仓库状态
$ git status
从现有仓库克隆
$ git clone git://github.com/xxx/xxx.git [user-defined directory]
忽略某些文件,编辑.gitignore文件
$ cat .gitignore *.[oa] !lib.a *.~ /TODO build/
比较当前文件与暂存区域快照之间的差异,也就是修改之后还没暂存起来的变化内容
$ git diff [filename or directory]
移除,移动文件
$ git rm [-f] [filename or directory] $ git mv file_from file_to
查看提交历史
$ git log #列出所有的更新 $ git log -p -2 #展开显示每次提交的内容更新,-2仅显示最近的两次更新 $ git log --stat #仅显示简要的增改行数统计 $ git log --pretty=oneline #每个提交在一行显示 $ git log --pretty=format:"%h - %an, %ar : %s" #定制显示的记录格式 #用oneline或format时结合--graph选项,可以看到开头多出一些ASCII字符串表示的图形,形象地展示了每个提交所在的分支及其分化衍合情况
取消已经暂存的修改
$ git reset HEAD filename
取消对文件的修改
$ git checkout -- filename
版本回退
$ git reset --hard HEAD^ #回退到上一个版本,HEAD^^上上个版本,HEAD~100往上100个版本 #HEAD^也可以替换成commit id的前七位
记录每一次命令
$ git reflog
关联远程仓库
$ git remote add origin git@github.com:henulwj/gitexercise.git
推送本地库内容
$ git push [-u] [remote-name] [branch-name] #第一次推送加上-u,之后就不用了
创建分支
$ git checkout -b dev #创建并切换到dev分支 #可以分为两步 #git branch dev #创建分支dev #git checkout dev #切换到dev分支
合并分支
$ git merge[--no-ff] [-m "xxxx"] dev #合并dev分支到当前分支,--no-ff禁用Fast Forward模式合并
删除分支
$ git branch -[d/D] dev #删除dev分支,-D强制删除分支
保存当前工作现场
$ git stash $ git stash list #查看保存的工作现场 $ git stash pop #恢复工作现场,同时删除stash $ git stash apply stash@{n} #仅仅恢复工作现场,不删除stash $ git stash drop stash@{n} #删除stash
在本地创建和远程分支对应的分支
$ git checkout -b branch-name origin/branch-name #分支名字最好一致
建立本地分支和远程分支的关联
$ git branch --set-upstream branch-name origin/branch-name
抓取远程分支
$ git pull #从远程获取最新版本并merge到本地 $ git fetch [remote-name] [branch-name] #从远程获取最新版本到本地,不会自动merge
创建一个标签
$ git tag tag-name [commit-id] #默认标签是打在最新的commit,也可以指定commit id $ git tag #查看所有标签 $ git show tag-name #查看标签信息 $ git tag -a tag-name -m "comment" commit-id #创建带有说明的标签,-a指定标签名,-m指定说明文字 $ git tag -d tag-name #删除本地标签 $ git checkout tag-name #切换到对应tag-name $ git push origin tag-name #推送标签到远程 $ git push origin --tags #一次性推送全部尚未推送的本地标签 $ git push origin :refs/tags/tag-name #从远程删除标签
忽略特殊文件
创建.gitignore文件,编写对应规则
配置别名
$ git config --global alias.st status #git st = git status $ git config --global alias.co checkout # git co = git checkout $ git config --global alias.unstage 'reset HEAD' #git reset HEAD file = git unstage file $ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
查看远程仓库信息
$ git remote show [remote-name] #查看某个远程仓库的详细信息 $ git remote rename [old-remote-name] [new-remote-name] #远程仓库重命名 $ git remote rm [remote-name] #删除远程仓库
[未完待续]~~
相关文章推荐
- Jenkins整合XCode详解
- [Goal] 9/21 ThoughtWorks宣讲会
- 正则表达式
- C++基础复习---4(内存分配)
- 健康问答API接口-健疑问开放接口
- MATLAB:镜像图片
- 使用wireshark进行EtherCAT分析实时性~~·
- 矩阵快速幂模板
- Android中dp,px,sp概念梳理以及如何做到屏幕适配
- 分治-归并排序1
- An interesting scroll background------ActionScript3.0
- c++基础复习-----3(位运算)
- 高效缓存服务器Memcached(一)
- 数据库的事务,事务的特性以及回滚
- 9.24
- jquery实现ul列表中点击li选择radio
- C++基础复习-----2(const 与static)
- UVA 11729 Commando War 突击战 【贪心】
- 分支结构 -- 2015/09/23
- 聊天室可以相互交流