Step04:Git分布式版本控制

仓库repository有本地仓库和远程仓库。
把本地目录成为工作区,经过处理后,工作区会有个.git隐藏目录,该目录可被称为版本库。版本库里存了很多东西,有暂存区(stage或者index)、分支master、指向master的指针HEAD等等。
处理步骤:

cd dirpath
git init

常见的操作是
1、 在本地建立一个仓库,再远程在github或者gitee上创建一个远程仓库。将两者进行关联后,任何一方有修改,再做同步操作。

cd test
git init
git add readme.txt
git commit –m “test repo”
git remote add origin https://github.com/hxy/git
git remote add origin git@github.com:hxy/test.git
git push –u origin master #第一次推送,加-u参数
git push origin master #第二次推送,不加-u

2、 进入到本地某个目录,从github或者gitee中某个远程仓库clone一个版本到本地,再进行修改和同步。

cd test
git clone https://github.com/hxy/git
git clone git@github.com:hxy/test.git
git push

3、 远程仓库被修改,如何同步到本地关联的仓库?

cd test
git pull origin master
git pull

先不说本地仓库和远程仓库之间的事情,单就本地仓库repository本身而言,探讨一些概念和操作。设计具体情景,来分析处理的具体步骤是什么。
1、 进入目录test,怎么将其设置成仓库,git管理起来?

git bash
cd test
git init
ls –ah

2、 在空仓库test下,建立两个文件t1.txt,t2.txt,如何将文件添加到版本库?

cd test
echo “111111”>t1.txt
echo “222222”>t2.txt
git status
git add t1.txt t2.txt
git add –A . #将此目录下所有文件添加到暂存区
git commit –m “add two text file” #将暂存区内容提交到当前分支
git log
git log - -pretty=oneline

3、 提交后,想返回到上个版本,上上个版本,倒数第100个版本,知道commit id的版本?
返回上个版本之后,又想返回到当前版本?

git reset - -hard HEAD^
git reset - -hard HEAD^^
git reset - -hard HEAD~100
git log - -pretty=oneline
git reset - -hard 1094a #版本号,前几号就OK
git reflog #查看历史命令
git reset - -hard 201e #返回上个版本后,找到当前版本的commit id返回

4、 修改工作区中某个文件readme.txt后,如何查看和版本库里最新版本的区别呢?

git diff HEAD - - readme.txt

5、 如果readme.txt修改后还没有add到暂存区,想返回到和版本库一样的状态,或者,readme.txt修改后已经add到暂存区,又做了修改,想返回到修改前暂存区的状态?

git checkout - - readme.txt

6、 本地删除文件,想把版本库中的该文件也删除?

rm readme.txt
git rm readme.txt
git commit -m “remove a file”
本地删除文件,但是删错了,怎么恢复到最新版本?

git checkout - - readme.txt

再说点高级的东西,分支管理。同样采用情景模拟的方式分析:
1、 创建分支dev,并从master分支切换到dev分支?

git checkout –b dev
git branch dev
git checkout dev
git branch #列出所有分支,当前分支前有个”*”

2、 在master分支上创建并切换到dev分支,新建readme.txt后提交,再切换回master分支,发现readme.txt文件不见了?此时需要合并dev分支到当前分支master分支?

git checkout –b dev
git add readme.txt
git commit –m “branch test”
git checkout master
git merge dev
git branch –d dev

3、 如何查看master分支和dev分支的分支合并图?

git log - -graph - -pretty=oneline - -abbrev-commit

4、 不是Fast forward模式的合并分支?

git merge - -no-ff –m ”merge with no-ff” dev

5、 分支管理策略的原则。
------------------------------------------------master分支:用来发布新版本,不在上面操作
----------dev分支,不稳定,到某时比如发布1.0版本时,将dev分支合并到master分支
-------------------------------------每个developer都有自己的分支,不断地合并到dev分支即可

6、 当要修复代号101的bug的任务时,现在的工作刚做一半,还不能提交,预计需要1天的时间,但必须先再2小时内修复该bug,该怎么办?

git stash
多次git stash
恢复时:git stash list #查看找到指定的stash
git stash apply stash@{0} #恢复指定的stash

假定在master分支上修复bug,在该分支上创建临时分支issur-101

git checkout master
git checkout –b issue-101
修复bug
git add –A .
git commit –m “修复BUG101”
git checkout master
git merge - - no-ff –m “merged bug fix 101” issue-101
git checkout dev
git status
git stash list
git stash apply #恢复后,stash内容并不删除,你需要用git stash drop来删除
git stash drop
git stash pop #恢复的同时把stash内容也删了
git stash list #查看stash内容

7、 某分支内容已被commit,现在要强制删除该分支内容,怎么处理?

git branch –D feature-vulcan-branch

8、 当git pull提示“no tracking information”,如何处理?

说明本地分支和远程分支的链接关系没有创建
git branch --set-upstream-to origin/
git branch --set-upstream-to=origin/dev dev
建立本地分支和远程分支的关联

9、 从远程库clone时,默认是只能看到本地的master分支,可用git branch查看。但是,要在dev分支上开发,必须创建远程origin的dev分支到本地,该如何处理?

git checkout –b dev origin/dev
在本地创建和远程分支对应的分支, 本地和远程分支的名称最好一致;
git push origin dev
此时小伙伴抓取最新的dev上的提交时(git pull),会碰到8描述的问题。

最后,来理解下标签,标签和某个commit绑定在一起,通过标签可以找到commit对应的历史版本。那么:
1、 查看所有标签:git tag
2、 在最新的commit上打个标签:git tag v1.0
3、 历史版本打标签:

git log --pretty=oneline --abbrev-commit
找到历史提交的commit id
git tag v0.9 f52c633

4、 查看标签信息:

git show v0.9

5、 创建有说明的标签:git tag –a v0.1 –m “version 0.1” 1094adb #-a标签名,-m说明文字。
6、 命令git push origin 可以推送一个本地标签;
7、 命令git push origin --tags可以推送全部未推送过的本地标签;
8、 命令git tag -d 可以删除一个本地标签;
9、 命令git push origin :refs/tags/可以删除一个远程标签。
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除。然后,从远程删除。8+9

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

指尖码动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值