Git的使用

一、Git简介

1、Git四个区域

1、工作区:处理工作的区域(即做项目打代码的区域)
2、暂存区:已完成的工作临时存放区域,等待被提交
3、本地仓库:存放数据的地方,但是还在本电脑上,若电脑存储空间损坏还是会造成代码消失
4、Git远程仓库:最终的存放区域,即远程服务器,电脑存储空间损坏也不影响远程仓库数据

2、Git四个状态

1、未跟踪:文件没有加入到git库中,不参与版本控制,使用git add变为暂存
2、已暂存:表示对已修改文件的当前版本做了标记,使之包含在下次提交的列表
3、已修改:表示修改了文件,但还没将修改的结果放到暂存区
4、已提交:表示文件已经安全地保存在本地Git仓库

新建文件 ---> 未跟踪(Untracked)
使用git add .或者git add ‘需要暂存文件名’ ---> 已暂存(Staged)
使用git commit将文件放在本地仓库中 ---> 已提交(Unmodified)
如果已经提交到本地仓库后修改了文件当前文件状态是 ---> 已修改(Modified)
如果已经提交到本地仓库后删除了文件当前状态是 ---> 未跟踪(Untracked)


1.png

3、Git忽略文件.gitignore

格式规范:
  1. 以 # 开头的是注释
  2. 以 / 结尾的是目录
  3. 以 / 开头防止递归
  4. 以 ! 开头表示取反
  5. 可以使用glob模式进行文件和文件夹的匹配(glob指简化的正则表达式)
glob模式的正则表达式:
  1. 星号*匹配零个或多个任意字符
  2. [abc]匹配任何一个在方括号中的字符(此案例匹配一个a或匹配一个b或匹配一个c)
  3. 问号?只匹配一个任意字符
  4. 在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如[0-9]表示匹配所有0到9的数字)
  5. 两个星号表示匹配任意中间目录(比如a//z可以匹配a/z、a/b/c或a/b/c/z等)

二、Git的使用

git.png

三、Git提交到远程仓库

cd到本地仓库
1、git init指令初始化本地仓库
git init
2、git add指令将工作区的文件添加到暂存区
git add .
3、git commit -m 指令将暂存区的修改提交到分支
git commit -m "提交日志"
4、git remote add origin指令把本地仓库与之关联添加后,远程库的名字就是origin
git remote add origin github链接
5、git push -u origin master 指令把本地库的所有内容推送到远程库上
git push -u origin master
6、以后提交就不用加-u了
git push origin master

1、修改git用户名和邮箱

1、修改当前的project的命令

git config user.name 你的名字;
git config user.email 你的邮箱;

2、修改全局的

git config  --global user.name 你的名字;
git config  --global user.email 你的邮箱;

3、查看当前项目配置

git config --list 

4、查看全局配置

git config --global --list 

5、发现user.name有多个值

git config --global --replace-all user.email "输入你的邮箱" 
git config --global --replace-all user.name "输入你的用户名" 

四、Android Studio中Undo Commit,Revert Commit,Drop Commit区别

1、Undo Commit

作用:其实就是撤销了你Commit的这个动作。
适用情况:代码修改完了,已经Commit了,但是还未push,然后发现还有地方需要修改,但是又不想增加一个新的Commit记录。这时可以进行Undo Commit,修改后再重新Commit。

注意:已push情况不会删除commit记录,所以需要force commit操作,否则再次提交会提示需要merge。

2、Revert Commit

作用:将某次提交代码删除掉并新增一个Commit记录。会新建一个 Revert “xxx Commit”的Commit记录,该记录进行的操作是将"xxx Commit"中对代码进行的修改全部撤销掉。
适用情况:如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法。

3、Drop Commit

  • 未push的Commit记录:会删除Commit记录,同时Commit中对代码进行的修改也会全部被删除
  • 已push的Commit记录:区别在于线上的Commit记录不会被删除

4、reset Commit

作用:是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本。
适用场景: 如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以用这种方法。

//操作方法
git reset --hard 目标版本号

//撤销commit,并且保存提交过的内容到暂存区
git reset --soft HEAD^
//撤销commit,并且保存提交过的内容到工作区
git reset --mix HEAD^
//撤销commit,并且不保存提交过的内容(慎用)真用了不用慌,可以git reflog查看所有的提交记录,再次reset
git reset --hard HEAD^
操作 是否删除对代码的修改 是否删除Commit记录 是否会新增Commit记录
Undo Commit 不会 未Push会,已Push不会 不会
Revert Commit 不会
Drop Commit 未Push会,已Push不会 不会
Reset Commit soft和mix不会,hard会 不会

五、Git撤销已经推送(push)至远端仓库的提交(commit)信息操作

1、撤销提交信息

git reset --soft  HEAD^
git reset --soft <版本号>

2、修改代码,重新提交和推送

git add .
git commit -m ""
git push origin master --force

六、Git的amend操作

该操作会修改上一次提交的内容,但不会要求你编辑提交信息,仍保持上一次commit
1、修改还未push的提交

//修改最近一次提交
git commit --amend
//进入注释页面,进行修改(输入i进入编辑状态)
//修改后保存退出(esc退出并输入:wq!)

2、修改已经push的提交

//修改最近一次提交
git commit --amend
//进入注释页面,进行修改
//修改后保存退出
//强制推送
git push --force-with-lease origin master

3、git 使用amend补上遗漏文件

git commit -m 'initial commit'
git add 文件
git commit --amend --no-edit

七、Git多个远程仓库

1、首先添加远程仓库地址


image.png

image.png

2、切换到新增加的仓库分支develop


image.png

3、选中旧仓库分支并合并到当前新仓库分支


image.png

八、Git中cherry-pick 多个commit操作

经常需要从一个分支选择性的合并commit到另一个分支,具体可使用cherry-pick实现:
1.单个commit合并

git cherry-pick commit_id

2.多个连续commit合并
commit_id到commit_idn之间,包括两端

git cherry-pick commit_id..commit_idn

commit_id到commit_idn之间,非闭包

git cherry-pick (commit_id..commit_idn]

挑选多个commit:

git cherry-pick commit_id commit_idx commit_idy

3.合并过程中依次解决冲突后,继续合并

git cherry-pick --continue

九、Git中merge后push 到 Gerrit 失败,提示 no new changes ?

需求:git 分支合并

问题:使用 git merge 在本地执行分支合并操作,然后想 push 到 gerrit 上评审入库,可是在提交时,提示:

! [remote rejected] HEAD -> refs/for/dev (no new changes)

分析:no new changes 的意思,是说,这个合并,是个线性的合并。而合并的那些历史的 commit 节点,在 gerrit 上都已经评审过了,都是已有的 change 单,所以 gerrit 认为没有新的提交,就不让你提交评审。

方法1: 在 git merge 的时候,加上 --no-ff 参数,是为了让它生成一个新的 commit,这样就可以提交了~(不过生成的 gerrit change 是看不到改动信息的)

方法2:不经过 gerrit,直接 push 入远程库。(不推荐)

十、Git将代码push到Gerrit

需要Review(走Gerrit)

git push origin HEAD:refs/for/分支名

不需要Review(直接推)

git push origin HEAD:refs/heads/分支名

十、Git将代码迁移新仓库

整个仓库迁移:mirror方式

1、新建文件夹并cd到此目录
2、使用bare的方式克隆老仓库

git clone --bare <老仓库地址>

3、镜像push到新仓库地址

cd old-repository.git  
git push --mirror <新仓库地址>

4、删除老仓库(可选)

cd ..
rm -rf old-repository.git

注意:该方式会将新仓库所有其他分支全部删除,只保留老仓库的分支,适用于老仓库换地址迁移,不适用于迁移到新仓库已经有其他分支的场景

仓库某个分支迁移

1、旧仓库克隆本地

git clone <仓库地址>

2、同步修改记录

git fetch

3、添加新仓库地址

//首先确认下已有仓库别名信息
git remote -v
//添加新仓库别名地址信息
git remote add new_origin <新仓库地址>

4、提交老仓库某个分支信息到新仓库某个分支

//需要同步老仓库的分支必须要在本地checkout过
git checkout master
//同步最新提交记录
git fetch
//提交到新仓库对应分支下
git push new_origin 旧仓库分支:新仓库分支
//强制推送
git push --force new_origin 旧仓库分支:新仓库分支

5、提交所有老仓库分支及记录同步到新仓库

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

推荐阅读更多精彩内容