关闭

git基础知识

标签: git版本控制器git命令分布式管理版本库
100人阅读 评论(0) 收藏 举报
分类:

设置SSH key,可以让你的电脑和Code服务器之间建立安全的加密连接

https://code.aliyun.com/help/ssh/README.md
------------------------------------------------------------
Git 全局设置

git config --global user.name "xxx" //设置用户名
git config --global user.email "xxx@163.com" //设置用户邮箱
git config --global --list //查看用户信息
------------------------------------------------------------
本地创建仓库
mkdir app //新建目录
cd app //进入目录
git init //把app目录变成Git可以管理的仓库
touch readme.txt //创建一个文件readme.txt,建议下载Notepad++代替记事本进行编辑,命令框中可以用vim对文件进行编辑,用cat查看文件内容
git add readme.txt //告诉Git,把文件添加到暂存区
git commit -m "提交说明" //告诉Git,把文件提交到仓库(或分支)commit可以一次提交多个文件
git status //仓库当前的状态
git diff readme.txt // 查看readme.txt具体修改了什么内容
------------------------------------------------------------
版本回退
git log //显示从最近到最远的commit提交日志,简化显示日志内容的参数 --pretty=oneline
git reset --hard HEAD^ //穿越过去,上一个版本用HEAD^,上上一个版本用HEAD^^,往上100个版本用HEAD~100
git reflog //找到commit_id,版本号
git reset --hard commit_id //重返未来
注意:
穿越过去前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
------------------------------------------------------------
工作区和暂存区
工作区,就是你在电脑里能看到的目录,比如app文件夹就是一个工作区。
版本库,工作区有一个隐藏目录.git,它就是Git的版本库。Git的版本库里存了很多东西,其中最重要的就是称为stage的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

见图1,图2,图3.


-------------------------------------------------------------
管理修改
每次修改文件,要用git add命令把工作区的修改放入暂存区,git commit只负责把暂存区的修改进行提交。
提交后,用git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别。
-------------------------------------------------------------
撤销修改
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
-------------------------------------------------------------
删除文件
git rm readme.txt //从版本库中删除该文件,并且git commit。
-------------------------------------------------------------
本地库关联远程库
先有本地库,后有远程库的时候,如何关联远程库?
cd app //进入本地库目录
git init //新建git仓库
git remote add origin git@code.aliyun.com:xxx/app.git //关联一个远程库
git add readme.txt //把文件添加到暂存区
git commit -m "提交说明" //把文件提交到仓库
git push -u origin master //关联后,把本地master分支的所有内容推送到远程库,加上了-u参数。
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改。
-------------------------------------------------------------
从远程库克隆
git clone git@code.aliyun.com:xxx/app.git 本地目录
cd app
touch readme.txt //新建文件readme.txt
git add readme.txt //添加到暂存区
git commit -m "提交说明" //提交到仓库
git push -u origin master //把本地分支文件提交到远端仓库
-------------------------------------------------------------
**********
*分支管理*
**********
-------------------------------------------------------------
创建与合并分支
git branch //查看分支
git branch <name> //创建分支
git checkout <name> //切换分支
git checkout -b <name> //创建+切换分支
git merge <name> //合并某分支到当前分支
git branch -d <name> //删除分支
-------------------------------------------------------------
解决冲突
git merge <name> //合并分支时,主分支和被合并的分支都修改了同一个文件,必须手动解决冲突后再提交。
git status //告诉我们冲突的文件
-------------------------------------------------------------
分支管理策略
合并分支时,Git默认用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
合并分支时,加上--no-ff参数用普通模式合并,合并后能在历史中看到合并时的分支。
git merge --no-ff -m "提交描述" dev //合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
git log //看看分支历史
在实际开发中,按照几个基本原则进行分支管理:
首先,master主分支仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?
干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
所以,团队合作的分支看起来就像这样:

见图4。


-------------------------------------------------------------
Bug分支
bug处理步骤
git stash //假设当前在dev分支,保存当前工作
git status //查看工作区,就是干净的,可以放心地创建分支来修复bug
git checkout master //切换到master主分支
git checkout -b bug-101 //新建bug分支并切换到bug-101分支
git add readme.txt //修改文件并添加到暂存区
git commit -m "提交说明" //提交到仓库
git checkout master //切换到master主分支
git merge --no-ff -m "提交分支" bug-101 //合并分支
git branch -d bug-101 //删除bug分支
git checkout dev //切换到dev分支,继续之前的工作
git status //查看工作区,干净的
git stash list //显示之前保存的工作
git stash pop //恢复工作的同时把stash内容也删了
-------------------------------------------------------------
Feature分支
情景一:添加一个新功能,新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。
情景二:git branch -D feature //做到一半不做了,强行删除没有被合并的分支
-------------------------------------------------------------
多人协作
当从远程仓库克隆时,Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。
git remote -v //显示详细的远程库信息
git push origin master //推送分支master
git push origin dev //推送其他分支dev
master分支是主分支,因此要时刻与远程同步;
dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步
多人协作的工作模式通常是这样:
git branch //查看本地分支
git checkout -b dev origin/dev //在本地创建和远程分支对应的分支,本地和远程分支的名称最好一致
git branch --set-upstream dev origin/dev //建立本地分支和远程分支的关联
git push origin dev //从本地推送分支,如果推送失败,先用git pull抓取远程的新提交
git pull //从远程抓取新提交,如果有冲突,要先处理冲突
-------------------------------------------------------------
标签管理
git tag <name> //在当前分支打一个新标签,标签打在最新提交的commit上
git tag //查看所有标签
git log --pretty=oneline --abbrev-commit //找到历史提交的commit_id
git tag <name> commit_id //对之前的提交补打标签
git tag v0.9 6224937 //例子
git tag -a v0.1 -m "version 0.1 released" 3628164 //创建带有说明的标签,用-a指定标签名,-m指定说明文字
git tag -d v0.1 //本地删除标签
git push origin <tagname> //推送某个标签到远程
git push origin --tags //一次性推送全部尚未推送到远程的本地标签
git push origin :refs/tags/v0.9 //删除远程标签之前,先在本地删除标签git tag -d v0.9

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
问题汇总:
问题一:warning: LF will be replaced by CRLF in xxxxx

解决问题一:git config --global core.autocrlf false


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:691次
    • 积分:55
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档