【git】git 基础简单梳理

来源:互联网 发布:哆啦A梦 知乎 编辑:程序博客网 时间:2024/06/09 13:47

1.认识

           git  :是一款免费的开源的分布式版本控制系统.

           gitLab :免费管理私人和公开的软件项目,使用git作为代码管理工具,是一个web服务。

           gitHub: 是最大的git版本库托管商。

2.git 基础


           2.1 git的原理:

                       ★ git对待数据的方法  不像以前的版本控制会首先记录一组基本文件,然后记录每个文件随着时间积累下来的差异    而是像一个快照流,即第一次对全部文件制作一个快照,并保存这个快照的索引,以后如果文件修改则重新存储快照,如果文件没有修改,保留一个链接指向之前存储的文件。

            2.2 git特色:

                       ★ 直接记录快照,而非差异比较

                       ★ 近乎所有的操作都是本地执行,因为本地磁盘上就保存了项目的完整历史。速度快

                       ★ git每次变动都通过计算校验和,引用校验和的方式来保证项目的完整性,每次操作都难逃git监控

                       ★ git一般只做数据的添加操作,即使操作出错也可以进行数据的恢复,无后顾之忧。

            2.3 git的三种状态               

                         ★ modified (已修改)     :文件已修改,但是还没有保存到本地数据库

                         ★ staged (已暂存)         :对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

                         ★ committed (已提交)  :数据已经安全的保存在本地数据库中

            2.4 git的三个工作区域

                         ★工作目录 (working directory)  : 程序员从git 仓库中拉取出来放在本地磁盘以供使用和修改的内容区域

                         ★暂存区域 (staging area) :暂存区域是一个文件 ,保存了下次将提交的文件列表的信息,一般在git仓库目录中,有时也被称为“索引”。

                         ★git仓库  (.git repository)  :Git用来保存项目的元数据和对象数据的地方,克隆仓库时,拷贝的就是git仓库里的数据

                          工作目录、暂存区域以及 Git 仓库。

          2.5 git的工作流程 :

                       ★  在工作目录中修改文件 →

                       ★ 暂存文件,将文件的 快照放入暂存区域 →

                       ★ 提交更新,找到暂存区域的文件 ,将快照永久性存储到git仓库目录。


3. git命令


           3.1 配置环境  git config  (.git/config)

                        ★查看配置信息

git config --list  //列出所有配置信息 //此时因为还没有.git文件,所有可能没有信息

                        ★设置用户信息

git config --global user.name "xxx"//设置用户名 ,以后的每一次提交都会用该用户名git config --global user.email xxx@xxx.xx //设置用户邮件//

            3.2寻求帮助 help / man

git help add // add 命令帮助  windows,linux均可用,windows会弹出一个网页git add --help //windows,linux均可用man git-add //linux可用

           3.3 获取Git仓库途径

                      ★将现有项目导入到git     (首先要进入到指定目录)

git init //将进行初始化 ,创建了一个 .git的目录文件,文件中包含了一些必须的文件


                      ★从服务器上克隆一个现有仓库 :所有文件都属于已跟踪文件

git clone url //url代表了项目的地址git clone url name //自定义本地项目的名称

                       ★修改本地仓库名称 (默认仓库名 origin  默认分支master 都没有特殊意义)

git clone -o <new-name>


            3.4 工作目录中文件分类

                        ★未跟踪 :一般指那些新创建的文件,还没有纳入到版本控制,上一次快照中没有他们的记录。

                        ★已跟踪 :指那些被纳入了版本控制的文件,在上一次快照中有他们的记录。

             3.5  文件生命周期

                   Git 下文件生命周期图。

                           ★查看当前状态

git status [-s/--short]
                            ?? :新添加的未跟踪文件    A:新添加到暂存区中的文件    左M :文件被修改并被放入到暂存区中  右M :文件被修改还未放入暂存区

                           ★举例: 项目中新建一个文件 helloword.txt → git status ,显示为Untracked files → git add [file] →git status ,显示为Changes to be committed,表示此时该文件已暂存,并且保存在暂存区域的快照中;此时你可以选择撤销上次的暂存:git reset HEAD [file] 或者 提交:git commit -m "注释";


git add (files) //多功能命令 ,可以开始跟踪新文件,也可以将已跟踪的文件放到暂存区,还可以用于合并时把有冲突的文件标记为已解决状态等git commit -m "注释"git commit -a -m "注释"//功能是跳过 git add这一步(如果是未跟踪的文件不可以跳过),即不用添加到暂存区,直接提交



                3.6忽略文件     java 的 gitignore

                           ★创建一个 .gitignore 文件(vim创建/touch),并在其中列出需要忽略的文件类型,文件定义规范

                                     ★ 空行/#开头的会被忽略

                                     ★可以使用标准的glob模式匹配,即简化了得正则表达式 :* 一个或多个  ? 任意一个  [abc] 其中一个  ** 匹配任意中间目录

                                     ★匹配模式可以以 / 开头防止递归 : /TODO 只忽略当前文件夹的 TODO文件,不包括子目录中的TODO文件

                                      ★匹配模式可以以 / 结尾指定目录 :/build : 忽略 /build文件夹下的所有文件

                                      ★ 末尾加上 ! 表示取反

                            ★需要忽略的文件

.classpath    //eclipse.project       //eclipse*.iml           //intellij idea*.jar*.wartarget/         //编译后的文档.idea/          .settings/build/*.class


                3.7 删除已暂存的文件

git rm file//对于已暂存的文件,删除后就不再纳入版本管理,不可以直接使用rm filegit rm -f file //如果已暂存的文件被修改,需要强制删除才能成功

                 3.8修改文件名 (git mv 其实是移动的意思)

git mv test.txt newTest.txt //将test.txt重新命名为newTest.txt

                               ★ 曾经遇到过java文件首字母大小写修改的问题,刚开始写成小写,经过提交之后,再去修改文件名,还是无效!原来git是不识别大小写的修改的。

可以通过上面的修改方法进行修改,也可以改变配置,如下设置大小写敏感

git config core.ignorecase false //设置大小写敏感

                3.9查看提交历史(git log [option])

git log //列出所有的提交记录 author date notationgit log -p -2 //x显示最近两次提交的详细loggit log --pretty=oneline/full/short    //等等

                3.10撤销操作

                            ★重新提交,覆盖上一次的提交信息 (适用于有些文件没有添加,git add之后再执行此命令,或者提交信息写错,直接运行此命令)

git commit --amend //此时会出现一个编辑器,让你修改之前的提交信息,修改后保存退出即可
                            ★将上一次保存到暂存区域的文件撤销(只会修改暂存区域中的内容,工作目录中的内容不会丢失 ,git status 有提示)

git reset HEAD <file> //将暂存区域中的某个文件内容恢复到初始状态,而工作目录中的文件内容依然是修改过后的
                           ★将已修改但未暂存的文件撤销修改 (git status 有提示)(重点:任何未暂存或者未提交的内容被覆盖之后不可以恢复

git checkout --<file> //此时就会恢复到上一次拉取的状态,修改的代码会全部消失,不可恢复,请慎重

               3.11远程仓库的使用

                            ★查看远程仓库

git remote  //origin :git给你克隆的仓库服务器的默认名字git remote -v //显示读写远程仓库的简写以及 url
另一种查看方式

git remote show <remote-name>

                            ★添加新的远程仓库

git remote add <shortname> <url>git remote add myremote http:...//这里都可以自己定义,但是url要确保是正确的git fetch myremote  //从远程上拉取所有代码到本地 ,但是不会自动合并或修改你本地的工作目录,需要手动 pullgit pull  //手动合并当前工作目录的代码
                            ★推送到远程仓库

git push [remote-name] [branch-name] git push origin master //将master 分支合并到服务器 origin (务必记住做这个之前先 pull代码)

                           ★远程仓库的重命名和移除

git remote rename <name-before> <name-after>git remote rename origin myremote//将远程仓库名origin更名为myremote
git remote rm <remote-name>git remote rm myremote //移除远程仓库myremote

              3.12 打标签  :给历史上某一个提交打上标签,以示重要 :例如发布节点 v1.0

                           ★ 列出已打标签

git tag git tag -l "v1.0" //只显示与 v1.0相关的标签

                          ★创建标签

                                            ★★轻量标签 (lightweight):像一个不会改变的分支,只是一个特定提交的引用

git tag v1.0-lw //创建一个v1.0轻量标签git show v1.0-lw //显示轻量标签

                                            ★★附注标签(annotated):存储在Git数据库中的一个对象,可校验,包含信息丰富

git tag -a <tag-name> -m <anotation>git tag -a v1.0 -m 'myversion v1.0' //添加一个 v1.0附注标签
git show v1.0 //显示v1.0详细信息,包括提交内容

                                            ☆☆ 对过去的提交打标签

git log --pretty=oneline //分行显示提交日志git tag -a v1.1 <哈希值的部分校验> //此时会出现一个vi文本编辑器,输入tag信息,即备注信息
                           ★共享标签,即将本地创建的标签推送到远程服务器上

git push <remote-name> <tag-name>git push myremote v1.0 //将v1.0标签推送到远程的myremote服务器上

                3.13 Git别名

                            ★举例(这个貌似查出来的并不是最后一次提交,糊涂,但是可以用 git log -p -1也是显示最后一次提交的人的记录)

git config --global alias.last 'log -l HEAD' //将查看最后一次提交的命令等价于git lastgit last //查看最后一次提交的人

《以上是git的基础部分的总结,也当作是一次学习》 参看 :git官网文档

0 0
原创粉丝点击