最近“闲”得没事儿,捣鼓了一下Git,一下子入坑!!特来分享!
\quad -
\quad -
前面一部分是Git得基础知识,后面一部分是实际使用时需要的步骤及其命令。(初级版) 下面开始正文!
\quad -
\quad -
除了git还有svn、cvs这样的版本控制系统,它们的区别在于一个是分布式一个是集中式。集中式就是svn和csv这样的版本控制系统,分布式是git。
git config --global
config:参数是用来配置git环境的
–global:长命令表示配置整个git环境
初次使用git需要设置你的用户名以及邮箱,这将作为当前机器git的标识,如果你用它来下载远程仓库一些需要登录权限的仓库会要求登录,git默认使用配置邮箱以及用户名登入,但会要求你手动输入密码
用户名配置:user代表用户,.name代表配置用户的名称
git config --global user.name "你的用户名"
邮箱配置:user代表用户,.email代表配置用户的邮箱
git config --global user.email "你的邮箱"
不配置也行,当遇到要求登录权限的远程仓库会让你在手动输入用户名、邮箱、以及密码。
init:初始化当前目录为仓库,初始化后会自动将当前仓库设置为master
创建本地仓库的条件是需要一个空目录,然后在空目录中初始化你的项目。
mkdir test
cd test
git init
初始化后会生成git的配置文件目录,进入目录后可以看到它的相关配置文件。
使用git add
命令将文件添加到本地仓库的提交缓存
git add main.cpp
这个时候还不算添加到了本地仓库,我们还需要使用git commit命令为其添加修改的描述信息。在使用git commit时我们需要简单描述一下我们做了什么。
我们需要使用-m命令来简写描述我们的信息,如果不使用-m,会调用终端的注释编辑器让你输入描述信息。
git commit -m "add first file"
git commit
会为我们生成40位的哈希值,用于作为id,并把刚刚用git add
添加到提交缓存区里的文件提交到本地仓库中,便于我们回滚,至此,这个文件就已经添加到本地仓库中了,同时本地仓库也迭代了一个版本。
--amend
:重写上一次的提交信息
就像刚刚的列子里一样,我们提交了仓库,但是发现注释写错了,我们可以使用 --amend长命令选项来改写提交:
git commit --amend
输入上面的命令后会进入编辑器界面。编辑界面是vim语法。
正如刚刚改写提交的,想要确定是否改写成功,我们可以使用git log
查看一下
git log
git init
创建的,就是master。有三种模式:–soft 、–mixed以及–hard是三个恢复等级。
1、回滚到指定历史版本
git reset --hard 50a327e4190eb90f17f1abfa836e3aa969355f23 # 哈希id git log 获取
2、回滚当前仓库指向的版本
git reset --hard HEAD^
^代表上一个版本的意思,HEAD代表当前仓库的指向,当前HEAD指向master,就代表回滚到master上一次提交的版本。
git reset --hard HEAD~3
后面的3,代表以当前版本为基数,回滚多少次。HEAD3代表回滚master前三个版本。
git status
在git下有一个概念是缓存区,这是其它集中式版本控制系统没有的
这些文件中存储了我们一些提交的缓存数据,git会解析它们,HEAD文件就是指向当前的仓库。最后使用git commit提交时git会提交到当前仓库中,当前的工作区也就成为了最新一次提交的仓库版本。
比如我们使用git add添加了一个名为min.c的文件,但是还没有提交的时候我们修改了它的内容,修改完成之后在提交会发现内容并不是我们第二次修改的内容。
当我们使用git add添加到缓存区的内容后,我们在修改这个文件时,它跟缓冲区内容是没有任何关系的!我们使用git commit提交的时,它只会提交缓存区内容!
如果想提交第二次修改,我们只需要在git add一次,然后在使用git commit提交就可以了,git会自动帮我们合并提交。
](https://blog.csdn.net/bjbz_cxy/article/details/116703787)
平时我们可能写代码的时候不可能保证只改动了一个文件,我们切来切去最后都不知道自己改了哪些文件,为了保证所有的文件都能被准确提交,我们可以使用git add我们确定修改的文件,当git add后在使用status查看一下状态,看看是否有遗漏没有提交的文件。
如果你实在不确信哪些文件是改动过的,你只需要使用git add --all
git add --all
这个命令会将当前目录下包括子目录下所有改动的文件提交到暂存区,注意只包括改动的文件,不改动的不会放到缓存区。这个命令还会把删除的文件也提交进去。
如你在本地删除了min.c 这个命令会把删除信息也记录进去,然后在提交的时候把仓库里对应的min.c也删除掉,也就是说你在本地做的删除操作会被记录,提交仓库时会删除同样的文件,如果不想删除文件,可以使用git add .
,注意后面有一个“.”点的符号,这个命令跟git add --all一样,但是不会记录删除操作。
最后别忘记使用git commit提交到仓库中
checkout:切换参数,通常用来切换分支仓库
当我们在工作中修改了一个文件,猛然间发现内容好像改的不对,想重新修改,这个时又不知道自己改了什么代码,想撤销修改,有一个最简单的方法,就是git checkout – file,注意中间要有“–”,checkout这个命令是切换分支的功能,关于它我们后面在细说,你现在只需要知道这个命令加上“–”可以用来将文件切换到最近一次的状态
注意这个恢复只能恢复到上一次提交的状态,如你刚提交了这个文件到仓库,随后你修改了它,那么使用这个命令只会回到刚刚提交后的那个状态里,不能回到你还没有提交,但修改的状态中。
当我们想回滚指定文件到指定版本时,需要查看该文件有多少个版本可以回滚时,可以使用git log filename命令
git log test.c
再使用git reset命令将其回滚就可用了,命令格式如下:
git reset 1a1e91bf37add6c3914ebf20428efc0a7cea33f3 min.c
回退完成之后想要再次提交可以使用git add和git commit提交到本地仓库中,即可更新当前工作环境,让当前文件保持最新。
git add min.c
git commit -m "new"
如果我们使用普通的命令,rm删除文件,git状态会提示你删除了文件,需要使用add重新提交一次。
也可以使用git rm删除文件,但是也需要使用git commit提交一次
git reflog可以查看当前版本库的提交历史,凡是对仓库版本进行迭代的都会出现在这个里面,包括你回滚版本都会出现在这个历史中。
此方法仅限git rm,因为git rm会先将文件放入缓存区,且没有使用commit提交的情况下。
git rm d.c # 首先使用git rm删除一个文件
git reset # 再使用git reset重置所有缓存区操作
git checkout d.c # 重置完成之后在使用git checkout命令将文件取消操作
使用git checkout -b参数来创建一个分支,创建完成分支后会自动切换过去
git checkout -b dev
然后我们在使用branch来查看当前属于哪个分支,也就是查看HEAD的指向
git branch
git checkout -b等价于
git branch dev
git checkout dev
当我们想切换分支可以使用git checkout来切换,如刚刚我们创建了一个分支dev并切换了过去,现在切换回master
git checkout master
git checkout的作用是检出,如果是文件的话,会放弃对文件的缓存区操作,但是要使用reset重置一下变更才行。如果是分支的话会切换过去。
当我们新建分支并做完工作之后,想要把分支提交至master,只需要切换到master仓库,并执行git merge 分支名
就可以了
如我们在分支中新建了一个f.c和test.c的文件,然后在使用git checkout master切换到master,在使用git merge dev将其合并。
如果要查看当前所有分支可以使用:git branch -a; HEAD指向当前分支
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
git branch -D 分支名
注意这里的远程分支名不需要加origin,输入分支名就可以了。
git push origin --delete 远程分支名
当我们在开发中,无论做什么操作都建议使用分支,因为在团队开发中,master只有一个,合作开发里任何人都可以从master里拉取代码,拉取时master后创建分支,分支名改为你要做的操作,比如修改某某文件,修改什么什么bug,单词以下划线做分割,然后在提交一个版本
分支名必须简洁,和标题一样,提交的commit在简单描述一下就可以了。
如我们的master中有个bug,是内存泄漏。我们可以常见一个分支名为Memory_Leak,然后在commit里简单描述一下修复了哪个模块的内存泄漏,不要写修复了什么什么代码,什么什么问题导致的,只需要简单描述一下就可以了。
一般情况下,我们都是拉取master后,想要修改功能或者添加功能,都是创建分支,在分支里修改不影响master,如果修改错了代码或者误删之类的,在从master上拉取一份就可以了。
ssh-keygen -t rsa -C "[email protected]"
后面的邮箱是你在gitee上注册的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。
成功的话会在c/user/用户/下生成.ssh文件夹,进去,打开id_rsa.pub,复制里面的key。
其中,
第一步,点击右上角下拉列表中的Settings(账户配置)
第二步,左边选择SSH公钥
第三步,title随便填,Key粘贴在你电脑上id_rsa.pub文件中生成的key,然后点击确定
添加成功后,会发生邮件给你这个邮箱。
相关命令:
git init
git add
git commit
本地创建一个git仓库,又想在gitee创建一个远程仓库,并且使两个仓库进行远程同步,这样gitee上的仓库就可以作为备份,又可以让其他人通过该仓库来协作。
1)先在gitee,创建一个远程仓库
…
命令:
git remote add origin 仓库地址
第一次使用push的时候加上-u,以后可不加
git push -u origin 分支名
然后查看远程仓库,发现推送成功了
git push -u origin master -f #-f强制上传
1、先在gitee找到需要克隆的仓库,找到地址并克隆。(同刚刚的复制仓库地址)
2、本地执行clone命令
git clone 复制的地址
3、克隆指定某个分支
注意:在clone时默认是把当前地址里面的所有分支全部clone下来,但是只有master会显示
git clone -b + 分支 + 地址
1、先在gitee上添加文件
2、若要把gitee上新建的文件拉取到本地
git pull