肿瘤康复网,内容丰富有趣,生活中的好帮手!
肿瘤康复网 > Git学习笔记 -- 安装git 创建版本库 时光穿梭 远程仓库

Git学习笔记 -- 安装git 创建版本库 时光穿梭 远程仓库

时间:2022-08-28 09:34:43

相关推荐

一、Git的安装

在window系统上安装:从https://git-for-windows.github.io下载,然后按默认选项安装即可;

安装完成后,在“桌面”上右击,在弹出的菜单中选择“Git Bash”;

在蹦出一个类似命令行窗口的东西里面输入git命令:

$ git --version //查看git安装版本

安装完成后,还需要最后一步设置,在命令行输入:

$ git config --global user.name "Your Name"$ git config --global user.email "email@"//因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。

注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

$ git config user.name "yourname"$ git config user.email "xxx@ example. com"

通过使用 git config -l 列出在所有配置文件里共同查找的所有变量的设置值。

可以通过–unset选项来移除设置具体的配置项

$ git config --unset --global user.name

二、创建版本库

什么是版本库

版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

创建版本库的步骤:
选择一个合适的地方,新建一个目录

$ mkdir learnGit//创建目录$ cd learnGit//进入该目录$ pwd//命令用于显示当前目录

通过git init命令把这个目录变成Git可以管理的仓库

$ git initInitialized empty Git repository in /Users/michael/learngit/.git///初始化一个空的git仓库在...目录下

此时,learngit目录下有隐藏的.git目录,可以通过ls -ah命令,来查看learngit目录下所有文件(隐藏和未隐藏的)

把文件放到版本库

把文件放到版本库的操作情境如下:

在learngit目录里面新建一个文件,文件名为readme.txt,txt文件的内容如下:

Git is a version control system.Git is free software.

第一步,用命令git add告诉Git,把文件添加到仓库

$ git add readme.txt

用命令git commit告诉Git,把文件提交到仓库

$ git commit -m "wrote a readme file"

运行结果如下:

[master (root-commit) cb926e7] wrote a readme file1 file changed, 2 insertions(+)create mode 100644 readme.txt//git commit命令执行成功后会告诉你,1个文件被改动(我们新添加的readme.txt文件),插入了两行内容(readme.txt有两行内容)。

git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录

commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

$ git add file1.txt$ git add file2.txt file3.txt$ git commit -m "add 3 files."

三、修改版本库文件

修改文件之后:

git status //查看仓库当前的状态git diff “指定文件名”git diff HEAD – “指定文件名” //查看指定文件的修改内容(修改前、修改后文件内容对比)

查看修改的文件内容后,该改改,该加加,最后再提交文件(add和commit)

像这样,你不断对文件进行修改,然后不断提交修改到版本库里,就好比玩RPG游戏时,每通过一关就会自动把游戏状态存盘,如果某一关没过去,你还可以选择读取前一关的状态。有些时候,在打Boss之前,你会手动存盘,以便万一打Boss失败了,可以从最近的地方重新开始。Git也是一样,每当你觉得文件修改到一定程度的时候,就可以“保存一个快照”,这个快照在Git中被称为commit。一旦你把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,然后继续工作,而不是把几个月的工作成果全部丢失。

四、版本回退

查看提交历史记录
git log //查看提交历史git log --pretty=oneline //–pretty=oneline参数 只显示commit id(版本号)

一大串类似3628164…882e1e0的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id和我的肯定不一样,以你自己的为准。为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。

$ git log --pretty=oneline7f44d6c6601dc6f769991144e322234cc48dbac6 (HEAD -> master, origin/master) append GPLa11d57e4441b278305d6102263e6fc14534fbf6f readme added distributed info9dac2d1c05c87943664ccdb1d115a3a34e9e247a edit readme.txt file6be118b4e1cbd8539abc4191b7572f69d862c962 add other readme.txt1943eb06c596ed9f7edf33fd2a3223141eac8b8e add a git Note fileaf58caf89cc1b573f4e9a09fe299b92406fd6de3 wrote a readme file

回退到指定历史版本

在Git中,用HEAD表示当前版本,从上面可以看出,最新的提交是 7f44d…c48dbac6

上一个版本就是HEAD^,上上一个版本就是HEAD^^, 当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

git reset //回退到之前版本,两种方法:

$ git reset --hard HEAD^$ git reset --hard commit_id //版本号没必要写全,前几位就可以了

你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?

查看命令历史
git reflog //用来记录你的每一次命令,查看命令历史

五、工作区和暂存区

Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。

工作区(Working Directory)

就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区。

版本库(Repository)

工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区

暂存区就像购物车,没到付款的时候你都不确定购物车里的东西全部都是要的。。。每拿一件商品就付一次款。。。那才麻烦大了

把文件往Git版本库里添加的时候,是分两步执行的:

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支

因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

例子:对readme.txt做个修改,然后,在工作区新增一个LICENSE文本文件(内容随便写)

先用git status查看一下状态:

Git非常清楚地告诉我们,readme.txt被修改了,而LICENSE还从来没有被添加过,所以它的状态是Untracked

现在,使用两次命令git add,把readme.txt和LICENSE都添加后,用git status再查看一下

现在,暂存区的状态就变成这样了:

所以,git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。现在版本库变成了这样,暂存区就没有任何内容了:

六、管理修改

Git比其他版本控制系统设计得优秀的点在于:Git跟踪并管理的是修改,而非文件Git是如何跟踪修改的:每次修改,如果不add到暂存区,那就不会加入到commit中。

七、撤销修改

当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时

git checkout 可以丢弃工作区的修改:

git checkout – file

– 很重要,没有 --,就变成了“切换到另一个分支”的命令

命令 git checkout – readme.txt 意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commit或git add时的状态。

当你不但改乱了工作区某个文件的内容,还添加到了暂存区,想丢弃修改时

分两步:

第一步用命令git reset HEAD file,就回到了上面一个场景,第二步按上面一个场景操作。

已经提交了不合适的修改到版本库时:

想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

八、删除文件

在Git中,删除也是一个修改操作

你新建了一个文件(test.txt),提到交了版本库,然后你把这个文件删除了:

$ rm test.txt

有两种删除的可能:

一种是你真的要删除,另一种是你误操作:

真删除或误删前,可通过git status查看下仓库状态

$ git status# On branch master# Changes not staged for commit:# (use "git add/rm <file>..." to update what will be committed)# (use "git checkout -- <file>..." to discard changes in working directory)## deleted: test.txt#no changes added to commit (use "git add" and/or "git commit -a")

如果是真要删除:

那就用命令git rm删掉,并且git commit

$ git rm test.txtrm 'test.txt'$ git commit -m "remove test.txt"[master d17efd8] remove test.txt1 file changed, 1 deletion(-)delete mode 100644 test.txt

如果是误删除:

那就可以通过git checkout – file 很轻松地把误删的文件恢复到最新版本

$ git checkout -- test.txt

git checkout 其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”

九、

创建SSH
打开Git Bash,创建SSH Key:

$ ssh-keygen -t rsa -C "youremail@"

然后一路回车,使用默认值即可;

之后顺利的话,能在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

2. 登陆GitHub,打开“Account settings”,“SSH Keys”页面:然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。

为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

获取公有密钥

cat ~/.ssh/id_rsa.pub

添加远程库

现在的情景是,你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作,真是一举多得。

登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库

在Repository name填入learngit,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库

目前,在GitHub上的这个learngit仓库还是空的,GitHub告诉我们,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。

现在我们根据GitHub的提示,在本地的learngit仓库下运行命令

$ git remote add origin git@:shiaijuan/learngit.git

添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

把本地库的所有内容推送到远程库上

$ git push -u origin master

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

从现在起,只要本地作了提交,就可以通过命令

$ git push origin master

注意点:

如果执行git remote add origin …,出现错误:

fatal: remote origin already exists

则执行以下语句:

git remote rm origin

再往后执行

git remote add origin … 即可。

在执行git push origin master时,报错:

error:failed to push som refs to…

则执行以下语句:

git pull origin master

//先把远程服务器github上面的文件拉先来,再push 上去。

引起该错误的原因也可能是目录中没有文件,空目录是不能提交上去的

从远程库克隆

假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆。

在github上建一个仓库 勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。创建完毕后,可以看到README.md文件 用命令git clone克隆一个本地库(克隆本地库之前,你要先确认本地库位置)

$ git clone git@:shiaijuan/gitskills.git

给已经存在的项目添加git

前提:先去gitlab或github网站上创建一个新项目,完毕后记得添加.ignore;

1、打开终端,cd到已存在项目的目录,输入以下命令行,初始化一个本地仓库:

git init

2、创建 .gitignore 文件,在里面添加不要上传的文件的相应的匹配正则

/node_modules/dist

3、输入以下命令,把工程所有文件都添加到该仓库中(千万别忘记后面的.号!!!):

git add .

4、输入以下命令,把文件提交到本地仓库:

git commit -m "Initial commit" //Initial commit是提交代码的说明文字

如果出现nothing to commit, working directory clean​说明你已经提交好了。

​5、输入以下命令,添加远程仓库地址:

输入:git remote add origin + 你的仓库地址

例如:git remote add origin /hhh/GitDemo.git

如果出现fatal: remote origin already exists.说明你已经添加过远程仓库了,输入以下命令删除远程仓库:git remote rm origin,然后再次执行第5步。

6、输入以下命令,把文件提交到远程仓库:

git push -u origin master

然后你就等着它提交完成就完事了。

7、假如第6部失败的话再执行git pull –rebase origin master命令,然后再执行git push -u origin master即可上传成功。

8、完事后假如还是不能拉代码的话再重启项目执行git branch –set-upstream master origin/master即可。

9、报错:Updates were rejected because the tip of your current branch is behind

解决方法:

有如下几种解决方法:

使用强制push的方法:

$ git push -u origin master -f

这样会使远程修改丢失,一般是不可取的,尤其是多人协作开发的时候。

push前先将远程repository修改pull下来

$ git pull origin master$ git push -u origin master

若不想merge远程和本地修改,可以先创建新的分支:

$ git branch [name]

然后push

$ git push -u origin [name]

小结
要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;关联后,使用命令git push -u origin master第一次推送master分支的所有内容;此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改

问题

git 报错—fatal: Not a git repository fatal: Not a git repository (or any of the parent directories): .git。提示说没有.git这样一个目录解决办法如下:git init就可以了!

如果觉得《Git学习笔记 -- 安装git 创建版本库 时光穿梭 远程仓库》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。