开始学习使用git bash惹,一边摸索一边记录下自己的学习过程。
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
关于版本控制我是这样理解的:一个文件你做了修改,得到一个新的版本,可很多时候你无法使文件回到以前的样子。所以很多人会选择把修改过后的保存到一个新文件中。久而久之文件越来越多,你很难弄清楚哪个文件做了什么修改。这个时候就需要进行版本管理。
Git来对这些不同的版本进行控制。还可以很方便地查看两个不同版本之间的不同之处。
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
以下是菜鸟对这些知识的解释:
图中的 objects 标识的区域为 Git 的对象库,实际位于 “.git/objects” 目录下,里面包含了创建的各种对象及内容。
当对工作区修改(或新增)的文件执行 “git add” 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
当执行 “git reset HEAD” 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
当执行 "git rm --cached " 命令时,会直接从暂存区删除文件,工作区则不做出改变。
当执行 “git checkout .” 或者 "git checkout – " 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
当执行 “git checkout HEAD .” 或者 "git checkout HEAD " 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
申请了自己的github账号,下载git之后打开git bash。
配置本机的用户名和邮箱。
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"
新建一个文件夹,在目录下建一个test文本,**创建test.txt的时候记得编码设置为UTF8,否则会出现乱码。右键点击git bash。
test的内容随便写啦。。。。
输入git init初始化仓库
.git文件自动生成了,作用上文已经讲过啦,不能删噢。
$ git add 文件名.文件类型
添加我们之前创建的test文件
如果一个个添加太麻烦惹,我们还有其他方法!
git add -A 提交所有变化
git add -u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
git add . 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
by the way! 我们可以使用git status来查看状态
添加成功辣,我们先在可commit了
$ git commit -m “修改注释”
提交后git log可以查看日志!
我们添加文件后,文件开始被追踪了,这时我们可以git status看看两次的不同喔!
怎么看我们修改了什么呢?
使用$ git diff 文件名+类型
也可以查看文件的内容
$ cat 文件名
这个要注意的是必须在文件夹里有那个文件你才可以查看。
如果我现在想撤销更改,执行git checkout – .
然后打开文件看看,它果然复原辣!
然后我们再次修改文件内容。
执行添加,提交步骤。查看日志可以看到两个版本辣。
从上面的提交日志,黄色commit后面的一串数字,我们把它称为版本号吧!版本回退命令 :
$ git reset --hard 版本号前7位
查看文件,已经回到第一个状态了!
这是再git log查看日志,commit记录只有一个了,
想了解版本回退的原理看廖雪峰老师这个解释!很清楚鸭!
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013744142037508cf42e51debf49668810645e02887691000/
输入git reflog查看之前的版本,然后再次git reset --hard到需要的版本即可。
首先生成ssh
$ssh-keygen -t rsa -C “你的邮箱”
出现了这两行。这是让你输入保存这个秘钥的文件,不输入直接回车它会自动生成。
回车以后让你输入push的时候需要的密码,也可以不输入直接回车,这样push的时候就没有密码。
再回车。
这样ssh key已经创建成功辣
然后我们输入以下命令复制ssh key
clip < ~/.ssh/id_rsa.pub
进入github,进入Settings
点击左边的ssh and GPG keys
点击New SSH key,title随便起就好辣,然后把之前复制的ssh key粘贴,然后点击下面的Add SSH key。
添加成功后你的邮箱会受到信息!执行以下命令测试连接是否成功。
$ ssh -T [email protected]
连接成功
这里出现了SSH警告 Are you sure you want to continue connecting (yes/no)?
这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。
Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了:Warning: Permanently added ‘github.com’ (RSA) to the list of known hosts.
这个警告只会出现一次,后面的操作就不会有任何警告了。
$git remote add origin 你复制的地址
我的出现了fatal: remote origin already exists.错误,解决方案如图所示。
输入git remote -v验证一下会出现你添加成功的远程仓库。
如果你以后不想连接这个远程仓库了,只需要输入git remote remove +代称即可
by the way!如果你在创建 repository 的时候,加入了 README.md 或者 LICENSE ,那么 github 会拒绝你的 push 。你需要先执行 git pull origin master。
然后执行如下命令:把本地仓库上传至Github的仓库并进行关联
$ git push -u origin master
执行 git clone 复制的SSH地址
如果是直接clone了别人的仓库是没法push自己的修改的。你需要先fork到自己的远程仓库,然后再从自己那里clone。
如果clone了一个项目,并想为这个项目贡献自己的力量,你就可以往自己的仓库推送!然后在GitHub上发起一个pull request。
因为一个项目有很多人参与,如果远程仓库改变了,你想确保自己的文件和远程的一样。执行以下代码
$ git pull origin
或者
可以输入两句“git fetch”和“git merge”
$ git fetch
$ git merge
以下是我学习的一些博客,感谢这些大神们无私的分享!
https://blog.csdn.net/qazwsxpcm/article/details/68946736?utm_source=blogxgwz0#t1
http://www.cnblogs.com/schaepher/p/5561193.html#function
https://blog.csdn.net/qq_36667170/article/details/79085301#t0