1,安装git 在Linux上
git 查看是否有
sudo apt-get insatll git 命令直接安装等待
git --version 查看版本,确定是否安装上
或者在官网下载git源码 然后解压,在输入 ./config , make , sudo make install 安装即可
安装完成之后最后一步设置在命令行输入
git config --global user.name "your name"
git config --global user.email "[email protected]"
注意git config 命令的 -- global参数 ,用了这个参数,表示你这台机器上1所有的git仓库都会使用这个配置,当然也可对某个仓库指定不同的用户名和Email
2,创建版本库 将所有的文件都可被git管理,每个文件的curd,都能跟踪,可追踪历史,或者还原
1,创建一个空的目录
make learngit
cd learngit 进入目录
pwd 显示仓库的目录
2,通过命令把这个目录变成git可以管理的仓库
git init
在当前目录下就会出现一个.git 文件
3,创建文本
1,在刚创建的learngit创建文件
2,添加文件到仓库
git add XXX.txt
3,把文件提交到仓库
git commit -m "写入一个文件(描述)"
4,可在修改文件之后查看
1,git status 显示之前的文件被修改还没有提交
2,如果修改前后时间太久,想看具体的内容
git diff 修改的文件名
就能显示具体的修改内容
继续git add 文件 然后通过git status 看一下是否是自己修改的文件 放心 git commit 即可
再用过git status 查看仓库当前状态
小结:
要随时掌握工作区的状态,使用git status命令。
如果git status告诉你有文件被修改过,用git diff可以查看修改内容
5, 版本回退
查看历史记录,提交了几个版本
git log 显示从最近到最远的提交日志
如果不习惯看显示太多内容可用:
git log --pretty=oneline
想要回退版本,必须知道自己当前在哪个版本
git 中 用HEAD表示当前版本,上个版本是HEAD^,上上个版本HEAD^^,如果版本太多,可用HEAD~10 (向上回退10个版本)
git reset --hard HEAD^
回到指定的版本:
git reset --hard 版本号前几位即可
回退完,又想回退回去可通过
git reflog 查看之前版本的 commit id 直接回去
6,git 暂存区问题
相对于SVN git 与之不同的地方就是多了一个暂存区的概念
git add 将文件提交到暂存区
git commit 将暂存区所有的文件提交到当前的分支
当前的分支是在创建git版本库时,git西东为我们创建唯一的一个master分支
可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改
7,撤销文件区的修改
直接修改改乱的内容
git checkout --file
如果只进行了add 没有commit
可以用 git reset HEAD
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
8,删除文件 :rm 文件名
git rm 文件名
git commit -m "删除xx文件"
如果删错或者改错了,那就直接回退
git checkout -- 文件名
相当于一键还原
9,创建远程的服务器端 GitHub 或者gitee
创建好之后将目标的网址clone
注意GitHub需要配置公钥SSL
10,分支创建 合并
创建Dev分支 然后切换
git checkout -b dev
git checkout 加 -b表示创建并切换相当于下面两条命令:
git branch dev
git checkout dev
用git branch命令查看当前分支:
git branch 会列出所有的分支当前分支前面会显示一个 *
然后提交:
git add xx.txt
git commit -m "branch test"
dev分支创建完成可切换回master分支
git checkout master
将dev分支的工作提交合并到master分支上
git merge dev
git merge 命令用于合并指定分支到当前分支
合并完成之后可以将dev删除:
git branch -d dev
此时可以查看branch,就只剩下master分支:
git branch
创建分支完成工作相对于直接在master上完成工作较为安全
Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch
切换分支:git checkout
创建+切换分支:git checkout -b
合并某分支到当前分支:git merge
删除分支:git branch -d
11,分支冲突:
新建一个分支,在分支下修改数据并提交
再回到master分支对之前分支修改的数据进行从新修改提交就会产生冲突报警,
git merge合并就会产生问题必须手动解决
git status可以告诉我们冲突的文件
通过查看文件修改冲突部分,在进行提交,
再通过git log查看分支的合并情况,
没有问题在进行删除最开始创建的分支
总结:
当混帐无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git的合并失败的文件手动编辑为我们希望的内容,再提交。
用git log --graph命令可以看到分支合并图产品。
12,分支管理:
普通分支合并,Git会使用Fast forword模式,在这种模式下,删除分支后,会丢掉分支信息
可以强制禁用Fast word模式,git会在merge时生成一个新的commit,这样就会从分支的历史上查看出分支信息
基本流程如下:
git checkout -b dev
对修改的文件一通操作
git add xxx.txt
切回master git checkout master
准备合并dev分支,注意--no-ff参数,表示禁用Fast word
git merge --no-ff -m"merge with no-off" dev
由于本次合并创建一个新的commit,所以加上-m,把commit描述写进去
合并之后,使用git log 查看分支历史
详细显示分支合并的历史:
git log --graph --pretty=online --abbrev-commit
13,错误分支:
如果在开发过程中出现错误,但是文档没有提交,
git提供一个stash功能,隐藏之前的工作区域,
git stash
方便创建新的分支,修改bug,然后合并,最后删除
在使用 git stash pop,回到工作现场
14,丢弃一个未合并的分支
开发新功能,最好新建一个分支7
git branch -D 分支名
15,多人协作:
查看远程仓库的信息:git remote
或者:git remote -v显示详细信息
推送分支:指定本地分支,对应远程的分支,
git push origin master
其他分支就是:git push origin 分支名
一般master dev开发分支 需要推送
错误分支就在本地即可
开发:
git clone@远程库的SSL或者http
查看 git branch 当前所在的分支、
在dev上开发就必须创建远程origin的dev:
git checkout -b origin/dev
现在就可以在dev上继续修改,push等命令
如果两人的提交有冲突,先把最新的git pull下来,进行合并在推送
如果pull失败了,本地dev分支未指定和远程origin/dev分支的链接,根据提示设置dev:origin/dev 的链接
git branch --set-upstream-to
再进行pull,
pull成功但是合并的时候有问题需要手动解决,和分支管理的解决方法一致,再提交,推送
16,变基(适合强迫症)
1,在进行远程推送时,推送失败,pull ,然后使用git status查看状态 ,了解当前的位置,在使用log看看历史,然后就会看到一坨。受不了,操作一下进行整理,重订,git rebase 出来一串英文,赶紧使用git log 看看现在的情况,身心舒服
这就进行了变基,具体自己CSDN
变基操作的特点:把分叉的提交历史“整理”成一条直线,看上去更直观
缺点是:本地的分叉提交已经被修改过了
17,标签:绑定一个commit号,版本更新啥的更方便
打标签:切换到打标签的分支上
git tag v1.0 标签打好了
不放心就用:git tag 看看 就是 v1.0
一般默认的标签会打在最新提交的commit上,如果,工作忙忘记打了咋办?
找到历史提交的commit,然后打就行:
git log --pretty=oneline --abbrev-commit
找到对应commit id xxx,敲:
git tag v1.1 xxxx
在用git tag看看
注意:标签不是按时间顺序排列,而是按照字母排的可以使用:
git show v1.1 查看标签信息
还可以创建带有说明的标签 -a标签名 -m指定说明文字:
git tag -a v1.2 -m "very good!" xxx
删除本地标签:
git tag -d v1.1
推送标签到远程:
git push origin v1.1
或者一次性推送所有本地标签:
git push origin --tags
远程的标签删除:
先删除本地标签:git tag -d v1.0
然后删除远程:
git push origin :refs/tags/v1.0
然后登陆GitHub查看
18,链接远程码云:
git remote add origin git@码云的地址
如果使用命令git remote add时报错:
fatal: remote origin already exists.
说明本地已经关联一个origin的远程库
可以通过:git remote -v查看远程库的信息
根据需要删除,关联码云,在使用git remote -v查看
推送到码云:git push gitee master
19,自定义的一些功能:
让git显示颜色:git config --glonal color.ui true
忽略文件的设置:在Git工作区根目录下创建一个特殊文件的.gitignore 将想要忽略的文件名填进去,Git就会自动忽略这些文件
如果以后想添加文件到Git,但是添加不了,原因有可能是这个文件被忽略了。如果确实想添加可用 -f强制添加
git add -f APP.class
或者是.gitignore书写有问题,规则的问题,通过
git check-ignore命令查询
git 别名的设置:
例如:设置git status
git config --global alias.st status
之后敲git st 直接OK
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
--global参数是全局参数,这些命令在这台电脑的所有Git仓库下都有用。
最省心的就是把log直接修改lg 直接起飞。
配置文件:在.git/config文件下
别名就在[alias]下:直接删除别名对应的行就可删除别名的使用
所以能躺着绝不坐着!!!
20,搭建Git服务器
1,一台运行的Linux机器,Ubuntu或者Debian,然后就是apt命令
2,安装:sudo apt-get insatll git
3,创建一个git用户,用来运行git服务
sudo adduser git
4,创建证书登录
收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
5,初始化Git仓库
先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:
sudo git init --bare sample.git
Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:
sudo chown -R git:git sample.git
6,禁止使用shell登录:
出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。
7,克隆远程仓库:现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行
git clone@....
8,公钥的管理:
把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys文件里就行