Git学习
要确保/etc/hosts里配置了能访问你git仓库的ip
/etc/hosts
172.16.40.14 git.ihanchen.com
linux下载安装git
1、下载官网:
https://git-scm.com/download/linux
2、安装git依赖包
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
3、删除已有的git
yum remove git
4、下载git源码
切换到你的包文件存放目录下
cd /usr/src
下载git安装包
wget https://www.kernel.org/pub/software/scm/git/git-2.8.3.tar.gz --no-check-certificate
解压git安装包
tar -zxvf git-2.8.3.tar.gz
cd git-2.8.3
配置git安装路径
./configure prefix=/usr/local/git/
编译并且安装
make && make install
5、将git指令添加到bash中
vi /etc/profile
在最后一行加入
export PATH=$PATH:/usr/local/git/bin
让该配置文件立即生效
source /etc/profile
1、工作区操作失误,撤销回到最新的状态
1、没有提交到暂存区
git checkout -- 你要恢复的文件
2、已经提交到暂存区【git add 文件】
① git reset HEAD 文件名 (git reset --hard HEAD)
② git checkout -- 你要恢复的文件 (git checkout HEAD)
3、
1-1、回滚历史版本
1、先使用git log查看历史版本
git log
2、在使用git reset --hard命令回滚
git reset --hard 要回滚id
2、与远程仓库关联
1、在你的用户主目录下是否有.shh目录,并且这个目录下有没有id_rsa和id_rsa.pub,没有即操作
ssh-keygen -t rsa -C "youremail@example.com"
将生成的id_rsa.pub内的内容复制到gitlab或者github上
2-1、远程和本地都有仓库,将项目推送到远程上
-- 关联一个远程库时必须给远程库指定一个名字,origin是默认习惯命名;
① git remote add origin 你的远程仓库地址.git
-- git push命令实际就是把当前分支推送到远程
② git push -u origin master
2-2、远程克隆
① git clone 你的远程仓库地址.git
3、分支
你处于你所在的分支时创建的文件【没有使用git add|git commmit】的情况下,你切换到master分支,这个文件
还是一直存在的(因为你创建的这个文件是在工作区中,而切换仓库时git只会更新跟仓库有关的文件)
3-1、分支的创建与删除
1、我们创建dev分支,然后切换到dev分支
git checkout -b dev == ① git branch dev【创建dev分支】 + ② git checkout dev【切换到dev分支】 == git switch -c dev
2、删除dev分支
git branch -d dev
3-2、查看分支
git branch -a
3-3、合并分支
-- 将dev分支合并到当前分支
git merge dev
3-4、切换分支
1、git switch master
2、git checkout dev
3、如果在当前分支的工作区做了修改,你说无法切换其他分支的【这个命令的作用就是为了解决git不提交代码不能切换分支的问题】
① git stash 保存当前工作状态
② 当你在别的分支完成任务,切回当前分支
③ git stash pop 恢复工作状态
3-5、删除分支
1、git删除本地分支
git branch -D 分支名
2、git删除远程分支
git push origin --delete 远程分支名
3-6、修改分支名
git branch -m 分支名 新的分支名
4、忽略文件 - .gitignore【创建与.get同级】
4-1、编写规则
bin/: 忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件
/bin: 忽略根目录下的bin文件
/*.c: 忽略 cat.c,不忽略 build/cat.c
debug/*.obj: 忽略 debug/io.obj,不忽略 debug/common/io.obj 和 tools/debug/io.obj
**/foo: 忽略/foo, a/foo, a/b/foo等
a/**/b: 忽略a/b, a/x/b, a/x/y/b等
!/bin/run.sh: 不忽略 bin 目录下的 run.sh 文件
*.log: 忽略所有 .log 文件
config.php: 忽略当前路径的 config.php 文件
4-2、.gitignore规则不生效
# .gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:
git rm -r --cached .
git add .
git commit -m 'wmm'