谁在自称无敌,那个敢言不败|

cha0s32

园龄:2年2个月粉丝:1关注:1

2023-03-09 15:49阅读: 19评论: 0推荐: 0

Github从入门到实操

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 git@github.com:cha0s32/xxx.git

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

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

查看远程库信息

git remote -v

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

git remote rm 远程库的名字

从远程库上克隆项目

# ssh

git clone git@github.com: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 上


如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。

本文作者:cha0s32

本文链接:https://www.cnblogs.com/cha0s32/p/17198786.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   cha0s32  阅读(19)  评论(0编辑  收藏  举报
评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示