git简单介绍:
工作区(add)->stage/index/暂存区/缓存区(commit)->分支(仓库)
所谓切换版本,就是把git的HEAD指针指向了某个版本
一、初始化项目
git init
二、配置基本设置
git config --global user.name "heliang5241"
git config --global user.email "1960050004@qq.com"
三、文件权限监听
在初始化的项目里面,原因是如果修改用户权限后,git也会认为文件有变化,所以如果使用chown -R www 会使全部文件发生变化,会把全部文件提交一遍或者在pull合并分支时候可能会产生冲突
cd .git
vi config
filemode = false;
四、修改配置
Tip:如果是centos8系统,就需要配置
修改/etc/ssh/ssh_config文件,在Host *条目下添加 IPQoS=throughput
Host *
IPQoS=throughput
五、ssh免密配置
应用于git仓库,不适用于生产环境
1.客户端执行命令:
cd /root/.ssh
ssh-keygen -t rsa -C "邮箱"
// 这时候会生成公钥(id_rsa)和私钥(id_rsa.pub)
// 公钥导入服务器(注意用户名)
ssh git@192.168.56.101 'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
2.服务端打开RSA认证:
vim /etc/ssh/sshd_config
// 内容如下
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
// 重启服务
which sshd
sshd路径 restart
3.服务端修改权限
chmod 700 /home/用户名/.ssh
cd .ssh
chmod 600 authorized_keys
4.客户端重新克隆代码
git clone git@192.168.56.101:/home/data/git/gittest.git
六、Git开发常用命令
获取某个分支
// 关联远程仓库
git remote add origin git@server-name:path/repo-name.git
// clone会自动关联远程仓库
git clone -b 分支名 用户名@远程仓库地址
git pull的日常作用
git pull = git fetch + git merge
// 1.把远程仓库的分支拉下来并且合并当前版本分支,也就是更新
// 2.当无冲突时并且没有add的时候不会覆盖,所以很适合前后端分离
// 3.也可用于直接覆盖本地的修改
git pull 远程服务器名 分支名
// 例子:
git pull origin newindex
七、Git开发常用忽略文件
// 部分非必要文件经常会被修改,这种文件要对其进行忽略(以phpstorm为例)
touch .gitignore
vim .gitignore
// 内容示例如下
abc.txt # 屏蔽abc.txt这个文件
*.txt # 屏蔽txt后缀的文件
test/ # 屏蔽test文件夹下的文件
git push origin newindex
八、从版本库拉下来不生效
// HEAD表示当前版本,回退到当前版本,HEAD^上一个版本,HEAD^^上上个版本
git reset --hard HEAD
九、克隆某个分支
git clone -b 分支名 远程仓库 -文件名
十、git还原
// 把工作区某个文件还原(未add的文件),被删除文件也能恢复
git checkout 文件路径
// 把某个文件从暂存区(stage)移除,保留物理文件
git rm --cache 文件名
// 把某个文件从暂存区和物理文件移除
git rm --f “文件路径”
// 清空暂存区的所有数据
git reset HEAD
// 回退到某个commit版本,通过git log 获取commitID,只要有未来版本的commitID,就还可以回到未来的版本,可以通过git reflog来查询
git reset --hard commitID
// 撤销当前分支所有修改,恢复到最近一次修改前干净的分支情况(慎用,会把composer的文件也清除)
git clean -d -fx
// 回到上一个commit的版本
git reset --hard commit_id
// 查看两个commit的差异
git diff commit-id1 commit-id2
// 强制同步远程仓库和本地一样
git push origin HEAD --force
// 把commit代码取消不改变本地代码
git reset --soft HEAD^
// 删除本地和远程仓库分支
git branch -D 分支名
git push origin --delete <BranchName>
十一、git里创建文件夹
// 一般空文件夹不能够被git检测并上传,需要添加一个空文件,如下:
cd 空文件夹
touch .gitignore
十二、工作中应用
// 溜溜工作中应用,克隆分支
git clone -b 分支名 远程仓库 -文件名
十三、进阶(额外知识)
大佬级别才用的东西
开发中的应用,修复bug:
// 开发环境尽量不要直接用主分支
// 一般分支命名
master // 主分支
dev // 开发分支
bug // 修复bug分支
feature // 推送远程分支
// 切换主分支
git checkout master
// 创建并切换新的分支
git branch -b dev
// 修改bug
git add .
git commit -m "修复bug"
// 切换到主分支合并dev分支
git checkout master
git merge --no-ff -m "信息" 分支名
1.分支的创建和使用
// 1.切换分支
git checkout xxx
git switch master // 最新用法,反正用过不行
// 2.创建分支
git branch xxx
// 3.创建并切换分支
git checkout -b xxxv
git switch -c dev // 最新用法,反正用过不行
2.合并分支
// 把某个分支合并到当前分支上
git merge 分支名
3.删除分支
git branch -d 分支名
git branch -D 分支名
4.提示语讲解
// 中文编译:当前master分支比远程的master分支要超前1个提交。
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
// 意思是某一个分支上执行了commit,如果在当前分支执行add->commit,就会连同另一个分支一起提交,如果两个分支修改了同一个文件,git merge便会产生冲突:
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.
// 意思是当前分支修改了某个文件,但是你要切换分支时出现的提示。
On branch dev
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: hello.py
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: readme.txt
// 当某个小伙伴最新提交与你本地文件有冲突时产生,先pull下来再push就可以解决
error: failed to push some refs to 'git@github.com:michaelliao/learngit.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
// 原因是没有指定本地dev分支与远程origin/dev分支的链接
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
解决方法(建立关系):git branch --set-upstream-to <branch-name> origin/<branch-name>
5.分支冲突解决方法
// 查看冲突的文件
git log
both modified: text.txt // 冲突文件是text.txt
// 修改冲突文件
把文件打开,一般内容如下,修改成我们想要的内容保存。
dev
<<<<<<< HEAD // HEAD指向的是分支,所以这是当前分支(删除)
add something
======= // 这是分割线(删除)
test
>>>>>>> dev // 这是分支名(删除)
// 重新上传提交
git add .
git commit -m ""
// 查看分支合并图
git log --graph
6.解决当前分支修改文件,但要切换分支产生的问题
// (1) 还原修改
git reset HEAD
// (2) 暂存修改(也叫快照)
git stash
// (3) 暂存查看
git stash list
// (4) 暂存的还原与删除
git stash apply // 恢复
git stash drop // 删除
git stash pop // 恢复的同时删除内容
7.复制一个分支的提交到当前分支
git cherry-pick 分支名 // 获取该分支最近一次提交
// 查看标签id(短得id)
git log --pretty=oneline --abbrev-commit
// 每一次提交后,分支名旁都会有一个字符串,例如:[dev 836cd23]
git cherry-pick 字符串
8.git标签的应用
// 一般用来给某个commit后打上版本(一般是针对本地的)
git tag v1.0
// 展示标签(日期,作者等信息)
git show v0.9
// 删除标签
git tag -d v0.1
// 推送标签
git push origin --tags
// 删除远程标签
git push origin :refs/tags/<tagname>
9.忽略文件
针对各种框架和语言,git提供了参考:忽略文件大全
// 排除所有.开头的隐藏文件
.*
// 排除所有.class文件
*.class
// 不排除.gitignore和App.class
!.gitignore
!App.class
// 强制add
git add -f 文件名
10.骚操作
// 给命令取别名
git config --global alias.st status // 把git status改成git st
git config --global alias.co checkout // git checkout改成git co
// Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中
11.搭建一个git服务器
搭建一个git服务器
// 创建用户
useradd git
passwd git
// 创建文件夹
mkdir -p data/git/gittest.git
// 把该文件夹变成git仓库
git init --bare data/git/gittest.git
// 修改权限
chown -R git:git data/git/gittest.git/
客户端访问
git clone git@192.168.56.101:/home/data/gittest.git
十四、SSH配置
配置远程仓库git免密码登陆
1.创建公钥与私钥
ssh-keygen -t rsa
2.复制公钥到远程仓库
ssh-copy-id -i /root/.ssh/nw.pub git@192.168.2.4
3.编辑配置文件
vim /root/.ssh/config
内容如下:
Host 192.168.2.4
HostName 192.168.2.4
Port 22
User git
IdentityFile /root/.ssh/nw
// 可以无限添加
设置gitee免密码登陆
1.先拉项目
git clone http://xxx.com 项目名
2.修改配置
vim 项目名/.git/config
内容如下:
http://gitee.com/x/xx.git
替换为
http://用户名:密码@gitee.com/x/xx.git
显式免密码登陆
十五、更换远程登陆
// 1.移除久地址
git remote remove origin
// 2.添加新地址
git remote add origin https://gitee.com/kira520/myproject.git