代码管理工具 git
安装
yum install -y git
mkdir /data/gitroot
cd /data/gitroot
# 初始化仓库
git init
# 创建一个新文件
echo -e “123\naaa\n456\nbbb” > 1.txt
# 把1.txt添加到仓库
git add 1.txt
# add完了必须要commit才算真正把文件提交到git仓库里
git commit -m “add new file 1.txt”
git status # 查看当前仓库中的状态,比如是否有改动的文件
git diff 1.txt # 可以对比1.txt本次修改了什么内容,相比较仓库里面的版本
版本回退
git 的原理图
# 多更改几次1.txt,然后
git add xx
git commit -m "xx"
git log # 查看所有提交记录
git log --pretty=oneline # 一行显示
git reset --hard f7c8e9 # 回退版本,其中后面跟的字符串是简写
# 撤销修改
rm -f 1.txt 不小心删除了1.txt
git checkout -- 1.txt # 恢复1.txt
# 如果1.txt文件修改,add后但没有commit,再想回退到上一次提交的状态,可以使用
git reset HEAD 1.txt
# 再执行
git checkout -- 1.txt
git reflog # 查看所有历史版本
删除文件
echo -e "11111111111\n2222222222" > 2.txt
git rm 2.txt
git commit -m "rm 2.txt"
远程仓库
# 创建远程仓库
1.首先到 https://github.com 注册一个账号,创建自己的git,
2.点repositories 再点new
名字自定义,比如叫studygit
3.选择public,点 create repository
添加key:右上角点自己头像,
选择settings,左侧选择SSH and GPG keys
左侧点New SSH key,把linux机器上的~/.ssh/id_rsa.pub内容粘贴到这里
4.把本地仓库推送到远程仓库
git remote add origin git@github.com:username/studygit.git
# 这一步是在远程创建一个新的仓库studygit,名字尽量和本地的一致
5.然后把本地的studygit仓库推送到远程的studygit
git push -u origin master
下一次再推送,就可以直接
git push
# 克隆远程仓库
cd /home
git clone git@github.com:username/lanmp.git
# 它提示,会在当前目录下初始化一个仓库,并创建一个.git的目录,如下
Initialized empty Git repository in /home/lanmp/. git/
完成后,ls可以看到一个lanmp的目录
cd lanmp
vi lanmp.sh
# 编辑一下文件,然后提交
git add lanmp.sh
git commit -m "sdlfasdf"
然后再推送到远程服务端
git push
分支操作
git branch # 查看分支
git branch dev # 创建分支
git checkout dev # 切换到了dev分支下
# 再用 git branch查看,会看到有两个分支master和aming,当前使用的分支前面会有一个*在aming分支下 ,
# 编辑2.txt,并提交到新分支
echo "askdfjlksadjflk" > 2.txt
git add 2.txt
git commit -m "laksjdflksjdklfj"
# 切换回master分支
git checkout master # 此时cat 2.txt发现并没有更改内容
# 分支合并
git checkout master # 合并分支之前,先切换到目标分支
git merge dev # 把dev分支合并到了master
# 如果master分支和dev分支都对2.txt进行了编辑,当合并时会提示冲突,需要先解决冲突才可以继续合并。
# 解决冲突的方法是在master分支下,编辑2.txt,改为dev分支里面2.txt的内容。 然后提交2.txt,
# 再合并dev分支。
但是这样有一个问题,万一master分支更改的内容是我们想要的呢?
# 可以编辑2.txt内容,改为想要的,然后提交。切换到dev分支,然后合并master分支到dev分支即可(倒着合并)。
# 合并分支有一个原则,那就是要把最新的分支合并到旧的分支。也就是说merge后面跟的分支名字一定是最新的分支。
git branch -d dev # 删除分支
如果分支没有合并,删除之前会提示,那就不合并,
# 强制删除
git branch -D dev
使用分支的原则
对于分支的应用,建议大家以这样的原则来: master分支是非常重要的,线上发布代码用这个分支,平时我们开发代码不要在这个分支上。 创建一个dev分支,专门用作开发,只有当发布到线上之前,才会把dev分支合并到master 开发人员应该在dev的基础上再分支成个人分支,个人分支(在自己pc上)里面开发代码,然后合并到dev分支
dev分支合并bob分支的命令是:
>
git checkout dev # 先切换到dev分支,然后
>
git merge bob
# 远程分支
# 本地新建的分支如果不推送到远程,对其他人就是不可见的
查看远程分支
git ls-remote origin
# 可以看到所有分支
对于git push分支分两种情况
当本地分支和远程分支一致时
# git push会把所有本地分支的变更一同推送到远程,如果想只推送一个分支,使用
git push origin branch-name
# 当本地分支比远程分支多,默认git push 只推送本地和远程一致的分支,想要把多出来的本地分支推送到远程时,使用
git push origin branch-name
# 如果推送失败,先用git pull抓取远程的新提交
git clone的时候默认只把master分支克隆下来,
# 如果想把所有分支都克隆下来,需要手动创建,在本地创建和远程分支对应的分支,使用
git checkout -b branch-name origin/branch-name # 本地和远程分支的名称要一致
标签管理
# 标签类似于快照功能,可以给版本库打一个标签,记录某个时刻库的状态。也可以随时恢复到该状态。
git checkout master # 先切到master分支上
git tag v1.0 # 给master打一个标签v1.0
git show v1.0 # 查看标签信息
git tag # 可以查看所有的标签
# tag是针对commit来打标签的,所以可以针对历史的commit来打tag
git log --pretty=oneline --abbrev-commit # 先查看历史的commit
git tag v0.9 46d3c1a # 针对历史commit打标签
git tag -a v0.8 -m "tag just v1.1 and so on" 5aacaf4 # 可以对标签进行描述
git tag -d v0.8 # 删除标签
git push origin v1.0 # 推送指定标签到远程
git push --tag origin # 推送所有标签如果本地删除了一个标签,远程也想要删除需要这样操作:
git tag v1.0 -d # 删除本地标签
git push origin :refs/tags/v1.0 # 删除远程标签
git别名
git commit 这个命令是不是有点长? 用别名可以提高我们的工作效率
git config --global alias.ci commit
git config --global alias.co checkout
git config --global alias.br branch
# 查看git别名使用命令
git config --list |grep alias
# 查询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"
# 取消别名
git config --global --unset alias.br
最后更新于
这有帮助吗?