Git笔记-入门

REF:https://www.liaoxuefeng.com/wiki/896043488029600/896067074338496

Git是什么?

git是 Linux创建者 Linus 为了应对 Linux社区中的一些人 与老牌版本管理服务提供商BitKeeper 的矛盾,同时为了更好地服务于开源的Linux的版本管理,花费两周时间,自行用C语言编写的 区别于之前的集中式版本控制系统的 能让每个节点都拥有完整代码仓库的 分布式版本控制系统。之后,Git迅速成为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。

安装git:

deban系列Linux:sudo apt-get install git 

apt-get 会自动解决依赖,且库很新, 可以直接使用,对用户非常友好。

redhat系列Linux:yum -y install git

yum 也会自动解决依赖,但redhat系列的库维护相对保守,库版本可能较为老旧,想用最新版还是得自己下载编译。

自行下载编译git,需要先自己解决git所需依赖项的安装。

yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker

 找到git最新版压缩包,在官网的版本列表或对应的github上获取地址,用wget在终端下载。

//github源:
wget https://codeload.github.com/git/git/tar.gz/v2.25.1

//或者官网源:
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz

按照Linux程序安装教程:*****里的源代码编译方式安装git。

//解压
# tar -zxvf git-2.9.5.tar.gz
//进入解压的文件夹
# cd git-2.9.5.tar.gz
//

[如果有低版本git程序已安装,先卸载: 使用 yum remove git 或 其他卸载方式]

因为已经手动安装依赖,所以不必再进行编译前检测(./configure),(但进行一次编译前检测也行)。 

编译:直接将--prefix选项赋给make all指令,来指定安装位置,all表示全编译(all是否生效和makefile内容有关,一般makefile文件里面会加上一行make all,但也不全是。)

make prefix=/usr/local/git all

安装:直接将--prefix选项赋给make install指令,进行安装。

make prefix=/usr/local/git install

配置环境变量:打开环境变量配置文件,命令 vim /etc/profile ,在底部加上Git相关配置信息:

PATH=$PATH:/usr/local/git/bin 

export PATH 

使用source指令(或直接重启系统),重新载入环境变量。至此软件即可在任何位置使用。

source /etc/profile

Wndows:普通软件安装法-按默认选项安装即可

(Windows使用git:在目标文件夹下右键选择git bash选项打开git控制台,在控制台里同Linux一样操作即可,也可以右键选择git GUI使用图形界面操作)

REF:https://www.cnblogs.com/youqc/p/10488181.html

使用git

mkdir mygit01   //新建一个文件夹作为仓库(版本库):(为防止出意外问题,在Windows下尽量使目录不含中文)

cd mygit01  //在目标文件夹下运行git bash并输入指令:git init    
git init  //此番操作后mygit01下会出现一个名为.git的隐藏文件,这就是版本库,记录了版本信息,其内容由git维护,不要手动去改动
//git init --bare  //创建一个没有工作区的空仓库,当做远程仓库,只有存储与提取版本库的功能,而不能编辑库的内容(如果用有工作区的仓库当远程仓库,在此工作区的某一分支上操作时,无法收到远程的提交,会导致一些问题)    
 
touch test.txt
git add test.txt  //添加文件到暂存区:git add
git commit -m "添加test文本文件"  //提交文件到仓库:git commit -m "对此次提交的描述"

git status  //查看当前仓库状态 会列出哪些文件需要添加到工作区,工作区有哪些文件可以提交等,有哪些分支可以合并等

git diff test.txt  //检测文件内容与之前版本有何区别

//git diff HEAD -- test.txt  //检测工作区文件与版本库最新文件有何区别

git log  //查看全部日志信息,可看见每次提交的具体信息

//git log [--pretty=oneline] [--graph] []  // [单行显示log] [显示分支合并图] []

git reset --hard [HEAD^]/[HEAD^^]/[HEAD~10]/[7a9041]  //重置(或者说返回)上一个提交(commit)/上上一个提交/前推第10个提交/编号为719041的提交

git reflog  //记录了每一次操作,用此能获取到每一次提交行为(commit)的信息与ID 

git checkeout -- test.txt //放弃上一次对工作区文件的修改(未add则还原为上一次commit的版本;add过修改后文件后再次修改,则还原为之前add到缓存区的版本)

git reset HEAD test.txt  //将test.txt从暂存区重置回工作区

rm test.txt  //删除文件(会被git记录到删除动作,如果反悔可用git checkout -- test.txt放弃修改)
git rm test.txt  //相当于把删除操作添加到暂存区(之后再commit一次,即可在库中删除,push一次即可在远程库中删除)


使用远程Git仓库

远程Git库分为自己用服务器建的git仓库和类似GitHub或Gitee这种公司提供的托管仓库。

使用别人公司提供的托管仓库:******先注册

自己用服务器建git仓库:******先安装与配置

在作电脑上生成密钥对:id_rsa和id_rsa.pub(默认存于当前用户目录下的.ssh文件夹里)

将公钥:id_rsa.pub里的内容复制到远程仓库的公钥存放处(GitHub或Gitee的设置里,自建git服务器的目标用户目录下的.ssh/authorized_keys文件里)

添加远程仓库:(对于公共仓库GitHub或Gitee,先在远程仓库网站添加一个远程仓库,获取到它的地址;对于自建git服务器仓库,用git init --bare repositoryName.git创建空仓库,地址为:用户名@服务器IP地址:仓库绝对地址)

//将本地仓库与远程仓库关联起来
git remote add origin git@github.com:michaelliao/learngit.git
//或本地为空时直接克隆远程仓库
git clone git@github.com:michaelliao/gitskills.git

//然后开始推送,-u会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
git push -u origin master

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

git分支

创建分支

git branch dev //创建分支
git checkout dev //切换到分支
//或一部到位:
git checkout -b dev //创建并切换到分支

git branch //查看分支,当前分支由*前缀标注
//git branch -r/-a   //(-r -remote ;-a -all)查看远程/所有即远程加本地 的分支

//在dev分支上正常工作并提交后,可以切换到主分支(maser),再合并

git checkout master //装换到master分支
git merge dev  //快速合并 dev 分支到当前分支
git branch -d dev //删除 dev 分支

//使用switch进行分支操作:
git switch -c dev //创建并切换到dev
git switch master //靠分支名切换到目标分支

//git merge 相当于一次commit,所以当分支冲突时,会在当前分支的冲突文件中列出冲突的双方,需要我们手动解决冲突,之后不必再merge,而是add该文件并commit。

//merge加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,(即使分支已经删除)能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
git merge --no-ff -m '相当于一次有记录的commit,这是commit描述' 

//stash功能,在工作到一半无法提交却又需要转换分支做其它事情时,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:stash后就得到一个干净的工作区,可以任意切换分支或开新分支进行急切的工作,完了之后再回来继续剩下的工作。不stash会报错,警告,无法切换分支,并要求你提交或stash。
git stash //保留工作现场
//do sth....然后切换回该分支
git stash list //查看工作现场列表
//然后恢复工作现场并删除工作现场记录
git stash apply [stash@{工作现场编号}]//恢复[列表里特定的工作现场]
git stash drop  //删除
//或一步到位,用pop取出最近的工作现场(取出列表里就没了,所以不必再删除)
git stash pop

//在一个分支上改好了一个bug,但在当前分支上并没改过,可用cherry-pick复制更改bug的那一次commit到本分支。
git cherry-pick 4c805e2  //4c805e2是更改bug的那一次commit的编号

//要强行删除没合并但提交过更改的分支,需要用-D参数
git branch -D dev //强行删除没合并的dev分支





Git远程协作

从远程仓克隆后只会看到master分支,想要在远程仓库有的其他分支上操作 ,需先创建远程origin的其他分支到本地

git checkout -b dev origin/dev  //加上远程仓库的分支名参数,以在本地建立该分支
//
//如果多人提交发生冲突,那后提交的人需要将改动后的分支pull到本地,同本地冲突处理一样,手动处理冲突并再push,pull其他分支需要先指定本地某分支与远程origin/某分支的链接
git branch --set-upstream-to=origin/dev dev //指定本地dev分支与远程origin/dev分支的链接

git rebase //优化可变的本地合并历史线

Git打标签

tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。比如v1.0.1

git tag v1.0.1 [9527a] //在当前分支的最新commit上打上标签[在指定的编号为9527a的commit上打标签]

git tag -a v0.1 -m "version 0.1 released" 1094adb  //-a指定标签名-m指定标签描述

git tag //查看所有标签

git show v1.0.1  //git 标签名 查看标签信息

//操作
git tag -d v1.0.1  //删除名为v1.0.1的标签

git push origin v1.0.1  //推送某一个标签
git push origin --tags  //推送所有标签

//远程删除:先删除本地标签,再推送删除远程标签
git tag -d v1.0.1
git push origin :refs/tags/v1.0.1

Git使用优化

.gitignore 忽略项配置文件,模板,用来让Git忽略工作区文件夹里一些不需要(如编译的中间文件)或不能(如自己的密码文件)加入仓库并推送到远程的文件 

配置别名:有些git指令较长,可以设置别名将其简化:

git config --global alias.st status  //将status简化为st,加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。

git config --global alias.unstage 'reset HEAD' //将指令组合字符串'reset HEAD'简化为unstage

//每个仓库的Git配置文件都放在.git/config文件中,当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中。进入文件,别名就在[alias]后面,要删除别名,直接把对应的行删掉即可。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值