首页 > 其他分享 >Github从入门到实操

Github从入门到实操

时间:2023-03-09 15:55:05浏览次数:55  
标签:git 入门 feature Github 实操 branch commit my 分支

Git 基础

创建版本库

git init 

添加及提交到仓库

git add xxx.file
git commit -m "xxxx"

## 看看工作区和暂存区的区别
git diff xxx.file

版本回退

# 查看最近三次commit 记录

git log --pretty=oneline

HEAD 表示当前版本, HEAD^ 表示上一个版本, HEAD~100表示前100个版本

git reset --hard HEAD^ # 回退到上一个版本

Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向指定版本

想从旧版本恢复到新版本,但是新版本的commit idgit log找不到了:

git reflog

可以看到每一步HEAD指针的变更记录,从而找到新版本的commit id

git reset --hard commit_id

撤销修改

git checkout -- file_name
  • 自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态
  • 已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态

如果修改已经提交到暂存区了,使用git reset HEAD file_name可以把暂存区的修改撤销掉,重新放回工作区

然后再git reset -- file_name把工作区的文件还原

远程仓库

第一步,在 github上创建远程仓库

本地文件夹关联远程仓库 (origin也可以改成其他的)

git remote add origin [email protected]:cha0s32/xxx.git

第一次把本地内容推送到远程仓库

git push -u origin master # -u 会把本地master分支和远程master分支关联起来

查看远程库信息

git remote -v

接触远程库和本地的绑定关系

git remote rm 远程库的名字

从远程库上克隆项目

# ssh

git clone [email protected]:cha0s32/xxx.git

# https
https://github.com/cha0s32/xxx.git # 比较慢

分支管理

创建与合并分支

git checkout -b dev # 创建名为dev的分支,并切换过去
# git switch -c dev

改动 dev 分支的文件,然后提交

git add .
git commit -m "a new branch"

切换回master分支

git branch master # git switch master

合并 dev 分支

git merge dev

删除 dev 分支

git branch -d dev

解决冲突

当两个分支同时改动同一个文件,并且都提交了以后,要 merge 需要手工解决冲突

新建新分支

git switch -c test

原 master 中有一个 readme 文件,内容为

aaaaaaaa
bbbbbbbb

且已提交

新分支中,也有readme文件,内容为

aaaaaaaaa
bbbbbbbba

也已提交,现打算在主分支用git merge合并,会出现冲突的提示,使用cat readme可以看到两个文件的区别

在主分支的readme中作改动,然后再次提交,解决冲突

git add .
git commit -m "conflict commit"

然后可以删掉 test分支

分支管理策略

通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

简单得说,就不需要手动解决冲突了,直接生成新的commit

命令如下:

 git merge --no-ff -m "merge with no-ff" dev

Bug 分支

情况: 有 Bug 的情况下,要新建一个分支进行bug修复,但当前的工作还不能提交

先把当前工作现场存储起来

git stash

切换到需要改bug的分支,新建新分支

git checkout master
git checkout -b bug-1.0.1

修改bug,并提交(记住commit id,切换到开发的分支后可以将修改合并)

git add .
git commit -m "xxxx"

合并bug分支

git merge --no-ff -m "merge" bug-1.0.1

回到开发分支,恢复工作现场

git switch dev

git stash list
git stash pop # 恢复同时把stash删掉

/*
也可以这样
git stash apply
git stash drop
*/

# 恢复指定的stash
git stash apply stash@{0}

把前面bug修改复制到dev分支

git cherry-pick {bug-commit-id}

好用的github工作流

1. 三个部分

  • remote
  • local
  • disk

2. 流程

  • 拉取远端仓库
git clone repo_address
  • 在local git 处 新建一个 分支 feature branch
git  checkout -b my-feature

这个时候local git 上就存在两个分支,main branchmy-feature branch

  • 修改 硬盘 代码, 修改完以后使用 git diff看看硬盘上文件和git上保存的branch有什么区别
  • 使用 git add file-name将改动存在暂存区里,然后使用git commit 将代码提交到local git
  • 使用 git push origin my-feature, 此时 github 项目上多了一个my-feature分支

3. 同步

如果此时发现main 直线里 多了一个 commit 名为 update

想要把 update 的commit 也同步到 branch 里面

  • 执行 git checkout main, 将 disk 的代码还原为 init 的状态
  • 执行 git pull origin master , 把远端的update同步到local gitmain分支下
  • 执行 git checkout my-feature,切换回 my-feature分支
  • git rebase main, rebase的意思是先把 my-featureinit的改动先扔到一边,然后main最新修改拿过来,最后把my-feature修改尝试弄回去,有可能会出现commit conflict,出现冲突要手动选择
  • git push -f origin my-feature, 把最新改动 pushgithub

4. Pull Request

my-feature的改动尝试合并在main分支里

  • pull request
  • 主分支如果接受合并,则执行 squash and merge,意思就是把其他分支的各种commit合并为一个改变,并把这个commit 放到 main branch
  • 合并后一般把远端的feature-branch 给删掉
  • local git 上 还存在 feature-branch
  • git checkout main, 首先切换到 local git 的 main 分支下
  • git branch -D my-feature, 把 my-feature branch 从local git 上也删掉
  • git pull origin master, 把最新的更新拉到 local 的git 和 disk 上

标签:git,入门,feature,Github,实操,branch,commit,my,分支
From: https://www.cnblogs.com/cha0s32/p/17198786.html

相关文章

  • JavaScrip快速入门
    一概述JavaScript是一个古老的语言,它几乎是互联网前端唯一的选择,我们不得不学习并掌握它。JavaScript是当前应用最广泛的脚本语言,用来在网页中实现交互效果。JavaScrip......
  • fatal: unable to access 'https://github.com/nhn/raphael.git/': OpenSSL SSL_read:
    这个问题真的处理了一上午的时间才解决,具体怎么解决的我也不是很清楚,大致步骤是这样的。由于公司要升级项目,所以找了好多轮子来学习。然后在准备学习这个轮子的时候在安装......
  • python快速入门1
    记录python若干功能特点,帮助快速了解python语法  #!/usr/bin/envpython#验证若干python功能importpandasaspdimportnumpyasnpimporttimeimportdate......
  • 使用Hexo+Github搭建免费个人博客过程记录
    虽然n久没有用GitHub了,记录一下个人博客怎么弄安装前提安装Hexo相当简单,只需要先安装下列应用程序即可:Node.js(安装最新版本即可,npm也一块装好了)npm-v测试Git前期......
  • python入门学习-2.特性、函数、面向对象编程、文件读写
    高级特性切片取一个list或tuple的部分元素>>>L=['Michael','Sarah','Tracy','Bob','Jack']笨方法:>>>[L[0],L[1],L[2]]['Michael','Sarah','Tracy']切......
  • 【数据结构入门】单链表(SList)详解(增、删、查、改)
    1、链表的概念及结构1.1链表的概念概念:链表是一种物理存储结构上非连续、非顺序的存储结构,但链表在逻辑上是连续的,顺序的,而数据元素的逻辑顺序是通过链表中的指针连接次序实......
  • podman 入门实战
    一入编程深似海,从此节操是路人。最近使用podman,就想着写一篇总结性的笔记,以备后续参考。就如同写代码,不写注释,过了一段时间可能会想这是我写的吗?不会吧,还要理一下逻辑才......
  • .NET Github Actions 测试覆盖率
    如果熟悉GIthub我们经常可以在一些开源项目的PR上看到会配置测试的验证以及覆盖率的报告,并且可以强制覆盖率不低于设定的值才可以进行MergePR。1.测试创建一个xU......
  • mybatis01_mybatis入门
    一、MyBatis简介​ MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为MyBatis。2013年11月迁移到Github......
  • Shiro认证入门程序
    7.2 Shiro认证7.2.1 Shiro认证流程    7.2.2 Shiro入门程序工程环境                        ......