git 学习笔记

1.什么是git

笼统地讲,git是一个版本控制系统,用户跟踪记录文件的变化,协作开发代码。

2.基本认识

仓库:用来存储项目文件代码和历史的记录。
提交:新增、修改 目录资源状态到仓库。
分支:一个仓库可以有多个分支,用来多人协作,开发新功能,修改bug,同时进行。独立于主线。
合并:将不同的分支修改合并在一起。

3.git最常用的基本命令

git init:初始化一个新的git仓库
git clone [url]:克隆新的git仓库
git add [file]:将文件的当前状态添加到暂存区。
git commit -m "message":将暂存区的改动提交到仓库。 (一定要先pull,获取远程仓库最新代码)
git push:将本地提交推送到远程仓库。
git pull:从远程仓库拉取最新修改到本地。
git branch test:创建test分支
git checkout test:切换到test分支
git checkout -b test:创建test分支并且切换到test分支

举例:常用的分支合并【目标:将feature分支合并到test分支】

1.merge方式

①切换到test分支 git checkout test
②在test分支执行 git merge feature (如果有冲突,需要手动解决冲突)
③推送代码到远程仓库 git push
【优点:1.简单直接。2.合并保留了每个分支的历史记录,可以清晰地追踪每个分支的变化。】
【缺点:产生额外的合并提交,合并可能会导致复杂的分支结构和困难的代码整合问题】

2.主分支使用rebase方式【一般不介意在主分支使用rebase】

①切换到test分支 git checkout test
②开始rebase git rebase feature
③如果有冲突需要手动解决冲突,解决后将修改的文件标记为已解决 git add <resolved_file>
④继续rebase git rebase --continue
⑤可能需要强推到远程仓库 git push -f
【优点:整洁的提交历史,直接是一条线】
【缺点:可能会改变提交历史,共享的分支上进行rebase,可能会对其他开发者造成困扰】

3.特性分支rebase+主分支使用merge

①切换到特性分支feature分支 git checkout feature
②开始rebase git rebase test
③可能会有冲突,解决后执行 git add <resolved_file>
④继续rebase git rebase --continue
⑤强推送代码到feature git push -f
⑥切换到test分支 git checkout test
⑦执行merge合并到test git merge feature
⑧推送代码到远程仓库 git push
【优点:整洁的提交历史,直接是一条线。不会改变主分支提交历史线】
【缺点:不会保留特性分支的提交历史记录,】
---注意:如果test分支有其他功能的代码,该代码整合到feature上,合并到master分支时也会将test分支其他功能代码合并到master分支--------

4.主分支使用cherry-pick

①切换到test分支 git checkout test

②test分支执行cherry-pick git cherry-pick <commit-hash1> <commit-hash2>【commit-hash* 为特性分支提交的commit ID】
③test分支执行 git push
-----注意:
1.如果<commit-hash*> 有连续的多个commit,test分支可使用:
 ~ 不包含start-commit-hash git cherry-pick <start-commit-hash>..<end-commit-hash>
 ~ 包含start-commit-hash git cherry-pick <start-commit-hash>^..<end-commit-hash>

2.如果特性分支有很多个commit,可以执行rebase合并多条commit,修改为1条commit。test分支cherry-pick合并后的commit

命令行使用rebase合并多条commit

①所在分支 执行 git rebase -i HEAD~n, n是你想要合并的 commit 数量。这会打开一个交互式 rebase 窗口。

image.png

②在交互式窗口中,【需要按 i 键,打开编辑模式才能修改】将要合并的commit 前面的pick单词改为 "squash" 或 "s"。【最顶端的commit保留pick单词,下面的几个commit 改为s】
image.png

③编辑后按ESC退出编辑,英文状态输入:wq,按回车。关闭编辑器。此时会重新弹出第二个编辑器。
image.png

④【需要按i键,打开编辑模式】修改合并后新的commit信息,按Esc键退出编辑,输入:wq,按下“回车”,退出编辑器。
image.png

⑤执行git push -f 强推

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • git init git add git commit git diff git checkout git sta...
    dancer4code阅读 136评论 0 2
  • 创建版本库: 初始化一个Git仓库,使用git init命令。 添加文件到Git仓库,分两步: 使用命令git a...
    xingeei阅读 648评论 0 4
  • 概述 Git是一个用来做代码管理和版本控制的工具。 参考教程 《Git权威指南》,机械工业出版社,蒋鑫。 如有理解...
    胖头鱼战士阅读 627评论 0 4
  • Git 内部实现原理剖析[https://www.jianshu.com/p/8154ac47d406] Git ...
    Whyn阅读 928评论 0 1
  • svn cvs 集中式版本管理 git 分布式 1:简单介绍:把改动推入(Push)到上游版本库(upstrea...
    偶尔小高兴阅读 984评论 0 1