git 使用心得分享

工作区域基本概念

  • Git本地有四个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)、git仓库(Remote Directory)。
  • Workspace: 工作区,就是你平时存放项目代码的地方
  • Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
  • Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
  • Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

一个完成的代码提交流程

  • git add:
    • 作用:将代码从work区上传到暂存区暂时储存(work区-→暂存区)
    • 示例:git add xxxxxxx/xxxxxxx.c
  • git commit:
    • 作用:将代码从暂存区上传到服务器区进行保存,此时代码已经到达服务器,但是并没有正式生效(暂存区-→服务器区)
    • 示例:git commit
  • git push:
    • 作用:完成代码的最终提交评审。
    • 示例: git push origin HEAD:refs/for/master
  • git commit --amend
    • 使用场景:如果已经完成了一次git commit,那么此时这个提交会生成一个commit id,如果此时有有一个新的提交需要和上一个已经完成提交使用同一个commit id,那么这个新的提交在commit 的时候就需要使用git commit --amend。
    • 这是一种很常见的场景,比如某一个提交已经git push,但是评审没有通过,需要修订,那么新修订的内容在git add之后,使用git commit --amend,即可在上一个提交的基础上追加你评审未通过后的修订内容。

一个完整的代码同步流程:

  • git stash:将本地的修订进行压栈
  • git pull --rebase:从服务器下载最新代码
  • git stash pop:将执行git stash后压栈的内容出栈,这样一来,尽管形成冲突,那么冲突也在本地,方便解决冲突

一个完整的冲突处理流程:

  • git stash 
  • git pull --rebase -->出现冲突,或者执行git stash pop后-->出现冲突
  • 手动处理从冲突
  • git add 冲突文件
  • git rebase --continue

如何通过commit id切换到某一次提交:

  • git reset --hard xxxxxxxxxxx --->xxxxxxxxxxx来源于 git log 中的commit id

linux命令行手动cherry-pick

  • 先切换到提交已经入库的分支获取 commit ID,这里最后执行一下 git pull --rebase
    • git checkout master -→已经在matser分支上入库
  • git log获取对应的commit ID
  • 切换到想要cherry-pick的分支
    • git checkout --track remotes/origin/branches-xxxxxxx-→以fttr分支为例
  • git cherry-pick xxxxxxxxxxx ---->执行cherry-pick指令,xxxxxxxxxxx为commit ID 
  • git commit --amend看日志是否需要修改不需要修改,直接q退出,但是这一步还是要执行,注意这里不需要执行git commit
  • git push origin HEAD:refs/for/branches-xxxxxxx --->push到cherry pick的分支

gerrit 界面 cherry-pick时遇到冲突怎么解决:

这种情况一般出现在已经将一个提交(暂且称为A)成功提交到某个分支仓库(暂且称为master)当你在界面将提交A cherry-pick 到tags时,提示出现冲突,解决方法如下:

  • 在master分支上先执行git pull --rebase,将刚刚提交当master的A pull到本地
  • 切换到需要cherry-pick的分支,git checkout --track  remotes/origin/tags1
  • 切换到tags后任然需要执行一遍git pull --rebase,pull最新代码到本地
  • 获取master分支上A的commitID 然后执行git cherry-pick xxxxxxxxxxx 进行cherry-pick,执行后对应文件会形成冲突
  • 可执行 git status . 查看是否有冲突,both modified表示冲突文件
  • 冲突出现后,需要手动处理冲突文件,冲突文件格式如下:

            <<<<<<< HEAD
            与你的提交形成冲突部分
            =======
            你需要cherry-pick的不分
            >>>>>>> 2211162

  • 手动处理完成冲突文件后 执行 git add rg_capwap/appc/source/objs/object_rjapd_ac_subordinate_ap.c,将文件添加进去
  • git cherry-pick --continue 继续进行cherry-pick
  • 注意:当进行到某一步时不知道该怎么做,可以执行git status ,会有一定的提示

一种分支切换的方法:

  • 切换分支之前先重设本地分支,以免有多余信息:git reset --hard
  • 清空非工程文件:git clean -fd
  • 同步服务器代码:git remote update
  • 切换分支:git checkout master
  • git pull origin master
  • 再次清空工程文件:git clean -fd

一些常用的指令:

  • 本地分支删除:git branch -d origin/xxxx
  • git branch --track origin/xxxx:这里应该是新建一个本地分支仓库,但是本没有与远程分支建立对应关系
  • git checkout --track remotes/origin/xxxx:从remotes/origin/xxxx checkout一个本地分支,名称默认为xxxx,此时remote和本地分支一一对应
  • git status .:查看当前的git 状态,在哪个本地分支、与哪个远程分支之间有对应关系
  • git branch -d origin/xxxx:这里是删除本地分支
  • git reset HEAD xxxxxx:如果git add 了多个文件,去掉某个add多了的文件或文件夹,xxxxxx为文件或文件夹
  • 查看分支信息:git branch -a

其他相关指令:

  • git status                                                              查看当前git状态,和之前有什么不同
  • git diff file                                                                查看某一个文件和之前这个文件有什么不同
  • git init                                                                     初始化一个git仓库
  • git add file                                                                 向准备提交的仓库中添加一个文件,如果是"."的话就是当前目录下所有
  • git commit -m "内容"                                                         提交git仓库并注释有什么东西进行了修改
  • git log                                                                      查看日志记录,在后面添加——pretty=oneline可以一条记录一行显示
  • git reset --hard HEAD^                          有多少个^代表回退几次也可以用~加数字代表回退几次,也可以用commit_id来选择回退到那个版本号
  • git checkout  file                                                         把file在缓存区里面的修改全部撤销
  • git reset HEAD file                                                          可以吧暂存区的内容撤销掉重新放回工作区
  • git rm file                                                                  从本地库中删除文件
  • git remote add origin git@地址. git                                          将本地库与远程库关联
  • git pull origin master                                                       推送到远程库master分支
  • git clone                                                                    仓库地址  将一个仓库克隆到本地、
  • git checkout -b                                                              分支名称 创建新分支,相当于git branch dev+git checkout dev两句合并
  • git merge 分支名称                                                           把后面分支融合到当前分支,俗称合并
  • git branch                                                                   查看当前分支
  • git branch -d 分支名称                                                       删除某分支
  • git log --graph                                                              查看分支合并图
  • git merge --no-ff -m ”描述” 分支                                             使用--no-ff合并之后有历史痕迹而不用的没有
  • git stash                                                                    隐藏当前工作现场
  • git stash list                                                               查看工作现场列表
  • git stash apply                                                              恢复工作现场但是不删除,可以指定恢复哪一个
  • git stash drop                                                               删除工作现场
  • git stash pop                                                                恢复的同时删除工作现场
  • git branch -D 分支名称                                                       强行删除一个分支
  • git remote set-url                                                           远程仓库名称 远程url
  • git push -d origin 分支名                                                    删除远程分支
  • git rebase -i                                  历史的编号
  • git push origin 分支名 -f                                                    强制提交
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值