简介
git和其他版本控制系统,例如svn有一个区别,就是git有暂存区的概念。工作区就是电脑里看到的目录,比如一个项目的文件夹。在工作区有一个隐藏的目录.git,这个不算工作区,二是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是成为stage(或者叫index)的暂存区。同时GIt还会为我们自动创建第一个分支master,以及只想master的指针,叫做HEAD。git add指令就是把把文件修改先添加到暂存区,当执行git commit的时候,就是把暂存区里面的所有内容提交到分支。
安装
Windows下安装
Git - Downloads
Linux下安装
sudo apt-get install git
git不能追踪二进制文件,例如图片、word文档等。它只会检测大小从100kb变成了150kb,具体里面改变了什么,git是不会知道的。
具体操作
1.创建git管理库
在Linux中,是在终端上进行操作。Windows中,是下载好后,打开git bash来操作。git bash也是使用命令行。
如果想要把一个文件进行版本追踪,收到,cd到该文件的目录下,然后运行指令
git init
这行代码的意思是,初始化该目录下的本地文件,当该命令执行完成后,用
ls -a
来查看该文件夹下是否有.git文件生成, 这个文件生成了才会正确进行管理。
2.git管理库的使用
把文件加入仓库,一共分三步。
创建文件;
vim test.txt # 进去随便写点啥
add到缓存区;
git add text.txt # 将文件添加入缓存区,可以同时提交多个
commit到仓库;
git commit -m '这里写说明内容'
-m后面的中的说明内容非常重要,是作为提交说明依据,不能乱写。
在第一次提交时,肯定会出现以下问题,如下
$ git commit -m 'first commit test'
Author identity unknown
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address (got 'AAA@DESKTOP-F0PIRRK.(none)')
这个问题就是让你添加一下你的姓名和邮箱,添加完成后,再提交一次就可以了。
3.测试git的回滚机制
先给text.txt文件中添加一点内容
echo this is content > text.txt # 将this is content添加到text.txt中
cat text.txt # 查看文件中的内容
git add . # 将所有未提交的内容都提交上去
git commit -m 'this is second' # 提交至仓库
vim text.txt # 随便写点啥进去
git status # 查看代码有没有改变
当执行玩git status后,应该会出现以下内容
$ git status
On branch master
Changes not staged for commit:
# 提示把文件放入缓存区,因为刚改完没放
(use "git add <file>..." to update what will be committed)
# 使用这个命令放弃工作目录中的更改
(use "git restore <file>..." to discard changes in working directory)
# modify表示被更改的文件是test.txt
modified: test.txt
no changes added to commit (use "git add" and/or "git commit -a")
此时,上面的modified是红色的,我们先把它add到缓存区,然后看一下状态,
git add text.txt
git status
然后显示的内容如下所示
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: test.txt
对比上面两次的输出结果,我们发现此处的modified变成绿色了,然后提示添加进缓存的语句不见了。此时将其commit去仓库就可以了。
提交进去后,我们再修改一下文件,然后通过下面语句来看看未提交的和版本库里的有什么区别。
git diff test.txt # 查看当前text.txt与版本库里有什么区别
输入玩上面代码以后,就会看到一下内容
$ git diff test.txt
# 下面这两行不用管,提示的是windows上面和Linux的按键冲突
warning: LF will be replaced by CRLF in test.txt.
The file will have its original line endings in your working directory
diff --git a/test.txt b/test.txt
index 40ae4a8..c1ae17e 100644
--- a/test.txt
+++ b/test.txt
@@ -1,2 +1,5 @@
# 这两个是版本库中已经有的
this is test
此时是对文件二次提交后做修改
# 下面的这个是还未提交、新加的内容
+this is third commit
+i want live longer
+and want to be ...
然后确认无误后,就可以通过add和commit进行提交了。
!!!!!!!!!!!!!!!!!回滚机制来了
git log # 查看以前提交的内容
执行此命令后,肯能会出现冒号结尾,稍微等一会,它自己就消失了。由于执行完这个命令,出现的内容比较详细,所以还有一个简洁显示版本号的命令,如下:
git log --pretty=oneline # 简洁显示版本号
然后就是我们的版本回滚的指令了,如下:
git reset --hard HEAD^
git reset --hard 34f8c5b
上面是两种版本回滚方式。
第一个中,HEAD表示当前版本,^表示回到上一个版本,两个^表示往回推两个版本,要是有100个版本,可以同 HEAD~100
第二个种,是通过版本的id来实现回滚的,id可能会很长,建议最少写7位。
如果在回滚到过去的某个版本后,发现自己本来只需要回滚50个版本,结果回滚了100个,这个时候怎么办呢,如果此时的命令窗口没关,可以去在上面的log中找到自己的版本号再滚回去,如果命令行窗口关了,就要通过其他的办法了。
重新打开命令窗口,输入以下指令
git reflog # 开发之前的操作日志
然后在日志中找到你想回去的版本,然后输入
git reset --hard cbc234e
git log
然后,都就回来了。
Git和GitHub交互
先打开git bash,然后再命令行中输入下面指令
cd ~/.ssh # 查看有没有ssh密匙
如果报错了,说明再电脑本地没有ssh密匙,需要去配置,先输入以下指令:
ssh-keygen -t rsa -C "youremail@example.com"
后面跟的字符串就是你绑定GitHub时用的邮箱,然后输入完指令后,按照以下流程走。
1.登录GitHub,点击自己的头像,并点击settings
2.在页面左侧点击SSH and GPG keys选项,并点击New SSH key按钮
3.去C:\Users\Administrator\.ssh路径下,找到.pub文件,复制里面的内容,粘贴到Github上就可以了
1.克隆项目
git clone 项目地址
项目地址在GitHub上都能够找到。从哪里克隆过来的,就会推向哪里,所以有时候需要指定分支克隆:
git clone -b develop 克隆地址
上面代码的意思是,克隆该地址的develop分支中的代码。
2.分支操作
git branch -M 名字 # 更改分支名字
git branch new # 创建new分支
git checkout -b new # 创建并切换到new分支上
git checkout develop # 切换到develop分支上git merge develop # 融合develop分支上的代码
git branch -d local # 删除本地的local分支
git push origin develop # 把develop分支代码推送到远程的develop分支上
git tag -a v1.4 -m '1.4版本' # 给当前版本打上标签,-a是指定标签名字,-m是说明
git tag -a v1.5 9fceb0 # 给指定的版本打上标签
注:在默认情况下,git push并不会把标签传送到远程服务器上,只有通过显示命令才能分享标签到远程仓库,命令如下
git push origin v1.5 # 把v1.5标签推送至远程仓库
git push origin --tags # 把本地所有标签都推送至远程仓库
3.添加至远程仓库
git remote add origin git@github.com:NFTSSTFN/123456.git
有时候在添加至远程仓库时会出现以下情况:
$ git push origin local-main
error: src refspec local-main does not match any
error: failed to push some refs to 'github.com:NFTSSTFN/123456.git'
如果出现以上情况,可以用下面这两个操作
git pull --rebase origin master
git push --set-upstream origin master
4.推送与提取
git push
git pull
假如远程库A中有三个分支(branch1、branch2、branch3)
远程库B有三个分支(branchX、branchY、branchZ)
本地仓库有两个分支(local1、local2)
当初始状态时,local1和local2和任何一个远程分支都没有关联,也就是没有upstream。当通过以下命令
git branch --set-upstream-to=A/branch1 local1
会给local1和branch1两个分支建立关联,也就是让local1的upstream指向的时branch1。这样做的好处就是当在local1上执行git push或者git pull时,不需要附加其他参数,Git会自动将local1分支上的内容push到branch1上去。或者自动从branch1上pull下来。
5.操作gitblit的一次流程
# 1.首先在gitblit中创建一个项目
# 2.找到自己需要添加至gitblit中的项目然后
git init
# 3.指定该项目的远程连接
git remote add origin http:192.168.1.10:8000/My_Project.git
# 4.将项目添加进本地仓库并提交
git add .
git commit -m 'The first commit'
# 5.将项目推送至gitblit
git push -u origin master # 如果这个报错,就用下面的
git push -f origin master
# 6.设置git push指令默认推送地址
git push --set-upstream origin master
完成设置后,就可以通过 git push 来直接进行提交了
6. Git大小写不敏感问题
具体解决如下(打开git Bash):
1、使用 git config --get core.ignorecase 查询,如果为true
2、执行 git config core.ignorecase false
3、再次执行 git config --get core.ignorecase,会发现已经修改为false了,即开启了GIT仓库的大小写敏感
(注意:查询结果为true,则表示本地GIT对大小写不敏感,为false,则对大小写敏感)
7. 远程仓库重定向
git branch -a 查看当前分支名称,例如我的叫origin
git remote remove origin 删除远程分支
git remote add origin '远程地址' 添加新的远程连接
git push --set-upstream origin master 设置默认推送地址
git push 推送项目