1.centos上安装git
创新互联建站是一家朝气蓬勃的网站建设公司。公司专注于为企业提供信息化建设解决方案。从事网站开发,网站制作,网站设计,网站模板,微信公众号开发,软件开发,微信平台小程序开发,十余年建站对白乌鱼等多个行业,拥有丰富建站经验。
yum install -y epel-release
yum install -y git
设置用户标识,否则初始使用该命令会提示
git config --global user.name "silen"
git config --global user.email "silen@huanglearn.cn"
2. 创建版本库
mkdir /home/gitroot
cd /home/gitroot
git init //用这个命令初始化,让这个目录变成git可以管理的仓库,配置等文件在.git目录下
3. 提交文件到仓库
1)echo -e "123\naaa\n456\nbbb" > 2.txt //创建一个文件 2.txt
2)git add 2.txt //把2.txt添加到仓库中
3)git commit -m "add new file 2.txt" //add完了必须要commit才算真正把文件提交到git仓库里,自定义描述
1)echo -e "ccc\nddd">>2.txt //先更改一下2.txt
2)git status //查看当前仓库中的状态,比如是否有改动的文件
3)git diff 2.txt //可以对比2.txt本次修改了什么内容,相比较仓库里面的版本,a是线上;b是本地
4)git status //修改了2.txt文件之后,查看状态;提示可以提交或者放弃更改
5)git checkout -- 2.txt //放弃修改或恢复删除,再次查看内容不发生改变
6)git add 2.txt //再次commit之前,也可以撤销
7)git reset HEAD 2.txt //撤销,回到了上一步
4. 结合日志版本回退
1)echo -e "eee\nfff">>2.txt //修改多提交第一次
git add 2.txt
git commit -m "change once 2.txt"
2)echo -e "ggg\nhhh">>2.txt //修改多提交第二次
git add 2.txt
git commit -m "change twice 2.txt"
3)git log //可以查看所有提交git仓库的记录操作
4)git log --pretty=oneline //一行显示,更清楚
5)git reset --hard b0b97 //根据这个log,我们可以指定回退第一个版本,后面跟的字符串可以简写。
6)git reflog //当回退到某版本后,再git log 则之后的版本不再显示了,用该命令显示所有的版本,以供继续恢复
5. 撤销修改
1)已修改或删除2.txt,还没有add,用checkout恢复到上一次提交时的状态
git checkout -- 2.txt
2)已修改或删除2.txt,已经add,但还没commit,先用reset HEAD,再用checkout恢复到上一次提交时的状态
git reset HEAD 2.txt
git checkout -- 2.txt
3)既已add,也已commit,用版本回退方法恢复到上一次提交时的状态
6. 删除
1)cp 2.txt 3.txt //创建一个新文件,提交
git add 3.txt
git commit -m "add a new file 3.txt"
2)rm -f 2.txt //删除版本库中的文件
git status //可以看到,提示2.txt文件被删除了
3)git checkout -- 3.txt //如果要想恢复,直接用
4)git rm 3.txt //在git仓库里删除,此步可以用 reset HEAD 撤销
git commit -m "delete 3.txt" //彻底删除3.txt
7. 做一个远程仓库(github)
1)https://github.com 注册一个账号,创建自己的git
点repositories --> new(名字自定义,比如叫studygit)->选择public,点create repository
2)添加key:
右上角点自己头像,选择settings,左侧选择SSH and GPG keys
右上角点New SSH key,把linux机器上的 /root/.ssh/id_rsa.pub内容粘贴到这里(生成公钥命令 ssh-keygen)
3)把本地参考推送到远程仓库
a. mkdir /home/studygit
cd /home/studygit
git init //初始化
git remote add origin git@github.com:huangzp-silen/studygit.git //本地的study仓库和远程study联系在一起
b. echo "test,test,test">test.txt //在本地仓库目录中创建一个文件并提交
git add test.txt
git commit -m "create a new file test.txt"
c. git push -u origin master //远程推送,第一次连接需要验证提示;下一次就可以直接 git push
d. github中查看,已推送成功
e. 编辑test.txt,在本地仓库提交之后,再远程推送git push
f. 克隆一个远程仓库
A. cd /home
git clone git@github.com:aminglinux/lanmp.git //克隆一个远程仓库至本地目录
B. cd lanmp
vi lanmp.sh //编辑克隆下来的文件
rm -rf ./git //删除配置文件
git init //重新初始化配置文件
C. git add lanmp.sh //提交至本地仓库
git commit -m "change lanmp.sh"
D. 登录github,创建一个lanmp项目
git remote add origin git@github.com:huangzp-silen/lanmp.git //同步关联
git push -u origin master //然后再推送到远程服务端
8. 分支管理
说明:master分支基本不动(即不修改文件,只做合并),只有测试完成才合并至master,平时一般使用开发分支,错了也没关系
1)git branch //查看分支
git branch silen //创建分支
git checkout silen //切换分支,星号标识
2)在silen分支下 ,编辑2.txt,并提交到新分支
echo "silen">silen.txt
git add silen.txt
git commit -m "create a new file silen.txt"
git checkout master //切换回master分支,查看文件,并没发现silen.txt
3)合并分支,开发过程中,经常需要将多人的分支合并
git checkout master //先换到需要合并的目标分支上去,如master
git merge silen //把silen分支合并到了master,只更新源分支(silen)文件的内容,目标分支(master)就算改动了也不会变,一般不会更改master分支
注:master分支和silen分支都对silen.txt进行了编辑,当合并时会提示冲突,方法:在master分支下,编辑silen.txt,改为silen分支里面silen.txt的内容,然后提交silen.txt,再合并silen分支(或者反过来)。合并分支有一个原则,最新的分支合并到旧的分支
4)删除分支
git branch -d aming //若分支没有合并,删除之前会提示合并
git branch -D aming //强制删除分支,即删除前不合并内容,会丢失数据
5)分支应用原则
master分支非常重要,线上发布代码用这个分支,平时开发代码不要在这个分支上,而是创建一个dev分支,专门用作开发,只有当发布到线上之前,才会把dev分支合并到master。开发人员应该在dev的基础上再分支成个人分支,个人分支(在自己pc上)里面开发代码,然后合并到dev分支
9. git stash 保留现场
当我们在silen分支,编辑了一个新的文件4.txt,这时候我们需要到其他分支去修复一个bug,所以需要保留现场,如果不这么做,每次(可能是其他同事)提交该分支,会有4.txt需提交的提示
1)git add 4.txt //提交一下,但是不commit
2) git stash //保存一下现场,该文件影藏掉
3)切换到另外分支去修复bug,修复完bug后,再回到silen分支
git stash list //查看保存过的现场
git stash apply //恢复现场,文件显示回来
git stash apply stash@{1} //可以指定恢复
10. 远程分支
1)在web上,可以进行分支的创建、切换、删除、恢复等操作
2)查看远程库信息,使用git remote -v,查看到origin名字, 本地新建的分支如果不推送到远程,对其他人就是不可见的
通过名字origin命令,查看远程分支 git ls-remote origin
3)从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交
4)给远程master分支推送文件
web端同步文件
5) 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致
cat .git/config //查看配置文件,得出远程URL,以供克隆使用
rm -rf studygit/
git clone git@github.com:huangzp-silen/studygit.git
web上创建dev2分支,本地同步
git checkout -b dev2 origin/dev2
6) 从远程抓取分支,使用git pull
11. 标签管理
标签类似于快照功能,我们可以给版本库打一个标签,记录某个时刻库的状态。我们可以随时恢复到该状态
1)git checkout master //先切到master分支上
git tag v1.0 // 给master打一个标签v1.0
git tag //查看所有的标签
git show v1.0 //显示详细信息
2)tag是针对commit来打标签的,所以可以针对历史的commit来打tag
git log --pretty=oneline --abbrev-commit
git tag v0.9 46d3c1a
git tag -a v0.8 -m "tag just v1.1 and so on" 5aacaf4 //可以对标签进行描述
3)git tag -d v0.8 //删除标签
4)git push origin v1.0 //推送指定标签到远程
git push --tag origin //推送所有标签
5)如果本地删除了一个标签,远程也想要删除需要这样操作:
git tag v1.0 -d
git push origin :refs/tags/v1.0
12. 巧用别名
1) git commit 这个命令是不是有点长? 用别名可以提高我们的工作效率,可以在配置文件中修改/root/.gitconfig
git config --global alias.ci commit
git config --global alias.co checkout
git config --global alias.br branch
2) 查看git别名使用命令
git config --list |grep alias
3) 查询log小技巧:
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
4) 取消别名
git config --global --unset alias.br
13. 搭建git服务器
github毕竟是公开的,而私有仓库又得花钱买。所以我们可以想办法搭建一个私有的,只自己公司使用的
1)yum install -y epel-reales
yum install -y git //安装git
useradd -s /usr/bin/git-shell git //添加git用户,并且设置shell为/usr/bin/git-shell,目的是为了不让git用户远程登陆,如果要登录,则usermod -s /bin/bash git
2) cd /home/git
mkdir .ssh
touch .ssh/authorized_keys //存放客户机的公钥
chown -R git.git .ssh
chmod 700 .ssh/authorized_keys
3)定好存储git仓库的目录,比如 /data/gitroot
mkdir /data/gitroot
cd /data/gitroot
git init --bare sample.git // 会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾
chown -R git.git sample.git
客户端上(自己pc)克隆远程仓库
以上操作是在git服务器上做的,平时git服务器是不需要开发人员登录修改代码的,它仅仅是充当着一个服务器的角色,就像github一样,平时操作都是在我们自己的pc上做的。
1)把客户端上的公钥放到git服务器上/home/git/.ssh/authorized_keys文件里
2)git clone git@ip:/data/gitroot/sample.git
此时就可以在当前目录下生成一个sample的目录,这个就是我们克隆的远程仓库了。进入到这里面,可以开发一些代码,然后push到远程;还需结合git lab图形化一起使用