Git学习

来源:互联网 发布:tomcat怎么修改端口 编辑:程序博客网 时间:2024/06/03 12:52

Git学习第一天

版本库 repository

目录中所有文件都可以被Git管理起来,每个文件的修改、删除,Git都可以跟踪,任何时刻都能追踪历史,或者是在将来还原。

自报家门
$ git config -- global user.name "name"
$ git config -- global user.email "email@email.com"

创建一个空目录

$ mkdir learngit$ cd learngit   #cd ..返回上一层$ pwd    #返回路径

通过$ git init把这个目录变成可以管理的仓库,.git文件夹默认隐藏,使用ls -ah命令可见

版本控制系统只能跟踪文本文件改动,TXT、网页、程序代码等,图片等文件是二进制文件,版本控制系统无法跟踪文件的变化,只能知晓文件大小变化,包括microsoft的word格式也是二进制格式。想要真正使用版本控制系统,要以纯文本方式编写文件,推荐notepad++代替记事本,将默认编码设置为UTF-8 without BOM。

创建一个文件例如readme.txt要放在learngit目录下,子目录也可以

第一步:把文件添加到仓库

$ git add readme.txt

执行命令没有显示,符合Unix“没有消息就是好消息”的哲学。

第二步:把文件提交到仓库

$ git commit -m "wrote a readme file"[master 7c62901] wrote a readme file1 file changed, 1 insertion(+)#一个文件改动,插入两行了 create mode 100644 readme.txt

-m后面是本次提交的说明,可以输入任何内容,目的是以后从历史记录里查找记录

$ git add file1.txt file2.txt  #可以添加多个文件$ git commit -m "add 2 files."  #全部提交到库

修改文件

修改readme.txt后使用

$ git status   #查看状态是否被修改On branch masterYour branch is ahead of 'origin/master' by 1 commit.  (use "git push" to publish your local commits)Changes not staged for commit:  (use "git add <file>..." to update what will be committed)  (use "git checkout -- <file>..." to discard changes in working directory)    modified:   readme.txtno changes added to commit (use "git add" and/or "git commit -a")   

Changes not staged for commit改变还没有上传,下面看样子是可以执行的命令

$ git diff    #工作区和暂存区对比$ git diff HEAD -- readme.txt    #工作区与分支的对比$ git diff -- cached     #暂存区和分支的对比

git add各种区别:

$ git add -A    #添加所有改动$ git add *     #添加新建文件和修改,但不包括删除$ git add .     #添加新建文件和修改,但不包括删除$ git add -u    #添加修改和删除,但不包括新建文件

commit前撤销add:

$ git reset <file>  #撤销提交单独文件$ git reset         #撤销全部改动

add/commit前撤销对文件的修改:

$ git checkout -- README.md     #add添加后(同commit提交后)就无法通过这种方式撤销修改

版本回退

$ git log   #命令显示从最近到最远的日志$ git log --pretty=oneline   #输出信息少一些7c629019a1e06c23898f61807a8e661ae694909b (HEAD -> master) wrote a readme file279466ac438a5b0650380a2b1e53b6add65e741e(origin/master) add txt

一大串的是commit id版本号

$ cat readme.txt      #查看文本内容$ git reset -- hard HEAD^  #回到上一个版本$ git reset -- hard HEAD^^  #回到前两个版本$ git reset -- hard commit_id  #回到任意版本$ git reset --hard 326428   #版本号一部分$ git reflog       #记录每一次命令

工作区和暂存区

工作区

就是电脑里能看到的目录,比如learngit就是一个工作区

版本库

工作区有一个隐藏目录git,这个是Git的版本库
版本库里存了很多东西,最重要的称为satge(或者叫index)暂存区,Git自动创建的分支master,以及指向master的一个指针HEAD

这里写图片描述

把文件网Git版本库添加时分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

这里写图片描述
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

一但提交后,如果没有对工作区做任何修改,那么工作区就是干净的

撤销修改

git checkout -- filename可以丢弃工作区的修改。

  1. 当filename修改后还没有被放入暂存区,撤销修改就回到和版本库一样的状态
  2. 当filename已经添加到暂存区,又做了修改,撤销修改就回到添加到暂存区后的状态

文件复原
--没有的话可能切换到另一分支

git add之后可以用git reset HEAD file把暂存区的修改撤销掉,重新放回工作区(?)
git reset既可以回退版本,也可以把暂存区的修改回退到工作区 ,HEAD表示最新版本。丢弃工作区git checkout -- filename

当已经commit后,只能版本回退了,网友说:版本回退是把所有文件都退回到上一版本。但如果提交的其它多个文件都是对的,而只有其中某一个文件是错的,要撤回,可以用git reset HEAD^ readme.txt命令把上一版本中的readme.txt文件重新置入缓存区,再提交或用checkout到工作去修改(测试并不可以呀)

删除文件

删除文件也是一个修改操作

$ rm test.txt  #此时,工作区文件被删除1、确实要删除$ git rm text.txt$ git commit -m "remove text.txt"文件从版本库删除2、删错了$ git checkout -- test.txt  #恢复

git checkout是用版本库里的版本替换工作区的版本(用checkout命令可以把添加到暂存区后又修改的文件恢复到再次修改之前的状态,版本库里根本没有的呀,奇怪)

原创粉丝点击