git学习心得

日常发现的新的学习心得:
fast-forward 快速合并即将 master 指针直接指向dev
在这里插入图片描述
而–no -ff 模式下是 在master 分支下为了合并dev新建一个提交,这样的好处可以看到合并的历史。
图例:
在这里插入图片描述

安装git

windows下
git bash
git config --global user.name “用户名”
git config --global user.emeal “密码”
设置过后在此目录下会多出.gitconfig、bash_history两个文件 前者记录用户名和邮箱 后者记录bash命令的输入记录
创建版本库

第一步
先在当前路径创建一个目录即文件夹例如learngit
mkdir learngit
cd learngit 进入目录
pwd 显示当前路径
注意在windows下 路径最好不要出现中文避免出现不可预料的错误
第二步
将此目录init为仓库
git init
会出现以下提示信息
Initialized empty Git repository in /Users/michael/learngit/.git/
注意.git是隐藏文件,不要手动的去修改仓库中的文件,容易弄乱。

将文件提交到版本库

第一步添加文件到库
创建的文件必须放在库文件夹下,不然git无法找到此文件
git add readme.txt

第二部 提交文件到库
git commit -m “提交时的备注信息”
ps:我的理解 第一步相当于把这所有要提交的文件放在一个容器中,第二步将容器提交到库中。因此可以多次提交多个文件。

时光机穿梭

修改文件后使用git status查看当前仓库状态
在这里插入图片描述

从上图可以看出当前仓库有改变没有被提交,提示使用git add命令去更新将要被提交的更新
使用git diff 查看当前文件的改变了什么内容
在这里插入图片描述
将修改的文件在仓库更新
git add readme.txt
git commit -m "infor"
在这里插入图片描述

最后查看修改后的情况
git status
在这里插入图片描述
版本回溯
再度修改readme 文件 更改信息为gpl
使用 git log 查看工作日志
在这里插入图片描述
添加 --pretty=oneline 是日志信息简化为一行 前面为次版本的id head指向的版本为当前版本
在这里插入图片描述
使用reset --hard HEAD^返回到上一个版本
reset – hard id 指定回到某个版本
git reflog 显示历史日志信息
在这里插入图片描述
工作区和暂存区
工作区即你创建的目录
版本库即.git
在这里插入图片描述
工作区add的文件先被放在stage中然后再提交到master中
master为git自动创建的第一个分支
前面的add和commit实际就是先将文件修改添加到暂存区(stage)再有commit提交更改到当前的分支
测试:
新建一个license文件内容随意
修改readme
add 两个文件到暂存区
变成如上状态
提交更改
在这里插入图片描述
管理修改

只有放入暂存区的内容被提交后才会被放到库中
撤销修改

git checkout file
关键:撤回的是工作区的文件的版本 无论是否add都是将当前工作区文件被修改的内容修改会之前的版本
git reset HEAD filename 撤销暂存区的修改即将提交到暂存区的修改抹去
删除文件

gitcheckout – filename 可以恢复工作区被删除的文件

建立远程仓库

git remote add origin git@github.com:HappyYang233/learngit.git
关联远程库
git push -u origin master
将本地的master分支的内容推送到远程库中,由于远程库唯恐,第一次推送master时 加上-u git不仅会把本地的master内容推送给远程新的master分支,还会将本地master与远程的master相关联

当关联成功后,本地做出的改变可以通过 git push origin master提交
总结: 关联库:git remote add origin git@service name:Path/repo-name.git
第一次推送master git push -u origin master
以后推送 git push origin master

从远程库clone
git clone https://github.com/username/clonename.git

分支管理

head指向当前分支
如head指向master后 新建一个指针dev 指向与master相同的提交,再把head指向master这样表示当前分支在master上
创建并切换分支:git checkout -b dev == git branch dev&&git checkout dev
查看当前分支:git branch
git merge 合并分支(将当前分支的指针指向要合并的分支的指针指向的节点)
删除指针:git brancj -d dev
合并冲突(如从一个节点有两个分支)
必须修改内容后重新合并
查看分支合并情况
git log --graph --pretty=oneline --abbrev-commit
分支管理策略
合并分支时通常用fast forward模式,但这种情况下删除分支,会丢掉分支信息,禁用fast forward模式在merge时生成一个commit 可以看分支的提示信息
git merge --no-ff -m “commit描述” dev
分支策略:
首先master应该是稳定的,仅用来发布新版本
多人合作的时候团队在dev上合作即将dev当作master各自有各自的分支整合到dev上 最后在master上发布
重要参数 --no-ff不快速模式
bug分支
在dev工作时需要紧急处理一个bug 但是dev未完成这时使用git stash保存现场 然后再去修复bug 最后再返回dev 使用git stash pop回到现场并删除stash中的现场信息
git stash apply 恢复现场但不删除stash中现场信息
git stash pop 恢复现场并删除信息
feature分支
开发新功能最好重新建立一个分支,要丢弃的分支用
git branch -D branchname删除
dev可以视为开发分支
要在origin/dev开发 必须创建origin/dev到本地
git checkout -b dev origin/dev
在同伴向origin/dev分支推送了提交后,你也对同样的文件做了修改并试图推送:
发生confict 先git pull将同伴的修改抓取下来再本地merge deal confilct the push
pull失败 原因是local dev 没能与origin/dev建立连接
git branch --set-upstream-to==origin/dev dev
再pull
pull后解决冲突再merge 再push
pull 取回远程主机某个分支的更新,与本地的指定分支合并
与远程主机分支建立追踪关系
git branch --set-upstream master origin/next
如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名。
$ git pull == git fetch ++git merge
Shell
上面命令表示,当前分支自动与唯一一个追踪分支进行合并。
$ git pull <远程主机名> <远程分支名>:<本地分支名>
Shell
比如,要取回origin主机的next分支,与本地的master分支合并,需要写成下面这样 -

$ git pull origin next:master
Shell
如果远程分支(next)要与当前分支合并,则冒号后面的部分可以省略。上面命令可以简写为:

$ git pull origin next
Shell
上面命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再执行git merge。

$ git fetch origin
$ git merge origin/next
Shell
在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动”追踪”origin/master分支。

多人协作的工作模式通常是这样:

首先,可以试图用git push origin 推送自己的修改;

如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

如果合并有冲突,则解决冲突,并在本地提交;

没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/。

这就是多人协作的工作模式,一旦熟悉了,就非常简单。

小结
查看远程库信息,使用git remote -v;

本地新建的分支如果不推送到远程,对其他人就是不可见的;

从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;

在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;

从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

rebase
现在没感觉他有什么卵用,不写

打标签

给需要标记的分支打标签即为某个时段某个分支的节点打标记
git tag name
git tag 查看所有标签
默认的标签是打在最新的commit
若要在之前的commit打标签则通过查看历史记录
git log --pretty=oneline --abbrev-commit
获得历史commit ID号
git tag name commitID
标签不是按时间顺序列出,而是字母排序 git show tagname查看版本信息
创建带有说明信息的标签
git tag name -a tagname -m “information” commitID
删除标签
git tag -d tagname
推送标签到远程库
git push origin tagname
推送全部没送到远程标签
git push origin --tags
删除远程标签
git tah -d localtag
git push origin :refs/tags/tagname
命令git push origin 可以推送一个本地标签;

命令git push origin --tags可以推送全部未推送过的本地标签;

命令git tag -d 可以删除一个本地标签;

命令git push origin :refs/tags/可以删除一个远程标签。
参考:廖雪峰git教程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值