文章目录

简单情况下的代码提交

  1. git fetch origin master:获取最新的master分支
  2. git checkout -b mydev:创建一个自己写代码的分支并切换
  3. Coding:开发人员写代码
  4. git add
  5. git commit -m "commit hints"
  6. git push origin mydev:提交到origin的mydev分支
  7. 发起PR(Pull Requests)
  8. 团队其他人员评论,建议
  9. 在本地mydev上根据建议修改代码
  10. git commit --amend :修改上次的commit
  11. git push origin -f mydev :覆盖上次提交
  12. 如果还不通过,循环这个过程。

Fetch and Pull

Origin 其实是你本地的分支,但他的指向是remote,remote更新代码以后,也就是新增了个提交之后,origin此时还并没有更新到记录。

通过一个小例子来看:

先对远程仓库的分支(这里以master为例)合并一条请求,然后按顺序执行下面的命令:

  • git log origin/master :注意查看输出,特别关注第一条
  • git fetch origin :更新远程跟踪分支(所有分支)
  • git log origin/master :看输出的,跟第一条比较

fetch只是追踪了远程分支的变化,但并没有将变化合并到本地分支。

所以,如果需要更新本地代码:

git pull origin master    //相当于git fetch 和 git merge

仅获取某分支的代码

  • 先clone master分支到本地,然后:
git checkout -b dev origin/dev
  • 直接获取分支代码
git clone -b <branchname> https://git.url <localfolderpath>

Localfolderpath 一定要是一个文件夹的名字,可以不存在会自己创建。

远程仓库已经合并了别人的代码

如果此时你在发起一个合并请求,且你们修改的不是同一个文件,会出现以下现象:

可以通过点击“更新分支”,通过两个commit实现的,先是他人合并到master的提交,接着才是你的提交。

但是推荐下面这种方式,只有一个commit,在你发起一个PR之后发现代码落后的处理。

git rebase origin/master 	# 如果没冲突是顺利执行的
git commit --amend
git push origin -f hang

冲突产生原因与解决办法

产生原因:远程仓库已经合并的代码里,修改了与你发起PR的分支中相同的部分。

举例说明:O是master分支,O_0是合并代码前的,A是一个分支,B是另一个分支;A,B都是从O的同一个commit节点中检出的。现在A修改了一些代码并且已经合并到O中了,A合并以后O_0变成了O_1,但是B不知道,B也修改了相同的位置发起了从B到O_0的PR(合并请求),因此导致了冲突。

那么正确的应该是什么?就是B不应该修改,然后fetch下远程O的代码,再checkout B ,修改代码,然后从B发起到O_1的合并请求。

如果你已经没注意这样做了,如何解决?当然也有办法。

git fetch										# 更新所有分支的代码
git rebase origin/master # 在B分支下执行,将B变基
  • rebase之后,冲突的部分会清楚的显示出来具体在那个文件里,而且文件里冲突的部分也会很清晰的标注出来。如下图:

  • <<<<<<< 和 ======= 之间是你当前分支所修改的内容

  • >>>>>>> 和 ======= 之间是别人的修改,也就是这里不同的修改造成的冲突。

  • 解决冲突,需要把这些冲突表示的符号也删掉。

然后完成rebase的过程:

git rebase --continue

也可以中止rebase:git rebase --abort,并且分支会回退到rebase开始之前的状态。

rebase完成之后,你按照正常提交代码就可以了。

不恰当的多个Commit合并为一个

git log	# 确认当前所处commit位置
git reset --soft HEAD~1 # 1是你想回退到几次提交前,或者
git reset --hard HEAD~1
  • –soft:需要保存提交的代码用这个,然后git stash, 再git stash pop 更改变化。
  • –hard 恢复到上次提交前,但提交的代码被清空。

再次提交代码的时候:

git commit --amend
git push origin -f mydev

Git撤销,放弃本地修改

参考来源:https://blog.csdn.net/A_grumpy_Mario/article/details/103282110?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

  1. 未使用git add 提交到暂存区的代码:
git checkout -- filepathname #放弃单个文件的代码修改
git checkout . #放弃所有文件的修改
此命令用来放弃掉所有还没有加入到缓存区(就是 git add 命令)的修改:内容修改与整个文件删除。但是此命令不会 删除掉刚新建的文件。因为刚新建的文件还没已有加入到 git 的管理系统中。所以对于git是未知的。
  1. 已经git add 提交到暂存区的代码:
git reset HEAD filepathname	 #放弃指定文件的缓存
git reset HEAD #放弃所有文件的缓存 # 此命令用来清除 git 对于文件修改的缓存。相当于撤销 git add 命令所在的工作在使用本命令后,本地的修改并不会消失,而是回到了如(1)所示的状态。继续用(1)中的操作,就可以放弃本地的修改
  1. 已经使用了git commit提交了的代码
git reset --hard HEAD^			 #退到最近一次commit的状态
git reset --hard commitid #恢复到上次提交,提交的代码被清空。
git reset --soft commitid
#恢复到上次提交,提交的代码还在,然后git stash, 再git stash pop 更改变化。
git log 命令来查看git的提交历史

更新远程分支列表

git remote update origin --prune

代码引用特定行

点开代码仓库某一文件的具体代码,按规则在url后面添加:

指定第30行代码:#L30

指定30~50行的代码:#L30-L50

团队协作常用术语

  • WIP —   Work in progress, do not merge yet. // 进行中,尚未合并。
  • LGTM —  Looks good to me. // 在我看来很好。(Review 完别人的 PR ,没有问题)
  • PTAL —  Please take a look. // 帮我看下 (一般都是请别人 review 自己的 PR)
  • CC —  Carbon copy // 复本 (一般代表抄送别人的意思)
  • RFC  —  request for comments. // 我觉得这个想法很好, 我们来一起讨论下
  • IIRC  —  if I recall correctly. // 如果我没记错
  • ACK  —  acknowledgement. // 我确认了或者我接受了,我承认了
  • NACK/NAK — negative acknowledgement. // 我不同意

Git在实际生产中的使用的更多相关文章

  1. 【课件】git零基础快速入门实战--重点讲解,在实际生产中整合idea对版本、分支的管理等

    1.git简单描述 git是重要的版本管理工具,几乎每个码农都有自己的git账号管理自己的代码,同时很多公司也是用git管理公司的代码, 因此掌握git在实际生产中的常规使用非常重要. 2.git学习 ...

  2. salesforce零基础学习(九十九)Git 在salesforce项目中的应用(vs code篇)

    本篇参考: https://code.visualstudio.com/docs/editor/versioncontrol https://git-scm.com/doc https://git-s ...

  3. 使用 Git 来管理 Xcode 中的代码片段

    使用 Git 来管理 Xcode 中的代码片段 代码片段介绍 xcode4 引入了一个新 feature: code snippets,在整个界面的右下角,可以通过快捷键:cmd + ctrl + o ...

  4. SIMATIC IT HISTORIAN在烟用二醋酸纤维素生产中应用

    原文转载自:http://www.soft6.com/tech/5/54287.html 本文介绍了西门子MES核心产品SIMATIC IT HISTORIAN实时数据库及客户端工具在流程生产中的具体 ...

  5. git submodule 使用过程中遇到的问题

    git submodule 使用过程中遇到的问题 资源文件 原.gitmodules文件的内容如下: [submodule "Submodules/FFmpegWrapper"] ...

  6. 易宝支付Demo,生产中封装成简洁的代付接口,不用request如何获取项目运行时的真实路径

    最近项目在做融360引流,涉及到了易宝支付的代扣和代付.易宝官方给出的demo只能简单运行,而且都是通过form表单的形式提交,返回XML格式.同时接口代码都写在了JSP中看起来不友好.项目在生成中想 ...

  7. idea中如何配置git以及在idea中初始化git

    idea中如何配置git以及在idea中初始化git呢: 参考此博文: http://blog.csdn.net/qq_28867949/article/details/73012300 *为了这个问 ...

  8. git从远程仓库中更新代码到本地仓库

    git从远程仓库中更新代码到本地仓库 有时候在使用git pull的时候,会莫名才报错.查了很多资料,尝试过git的很多命令.包括git fetch命令,都会报同样的错.最后终于发现了一条捷径,由网友 ...

  9. ORACLE 11g 生产中高水位线(HWM)处理

    数据库中表不断的insert,delete,update,导致表和索引出现碎片.这会导致HWM之前有很多的空闲空间,而oracle在做全表扫描的时候会读取HWM一下的所有块,这样会产生更多的IO,影响 ...

随机推荐

  1. LuoguP7008 [CERC2013]What does the fox say? 题解

    Content 森林里面有很多声响,你想知道有哪些声响是由狐狸发出来的. 已知你搜集到了 \(n\) 个声响,并且还知道某些其他动物能够发出的声响,已知如果没有哪一个声响是由其他任何一种动物发出来的话 ...

  2. VC Mirror Driver显示虚拟驱动经典开发

    一个简单的显示驱动实例windows wdk 7600的 mirror(镜像) 显示驱动部分基本流程:Windows 2000 DDK包含了一个例子镜像驱动程序,在 上面3个目录中包括了组件源文件.目 ...

  3. js 将二维数组转为一维数组

    方法一 使用ES的最新语法:Array.prototype.flat(). flat([dept]),参数 dept 为数组的深度,默认为1,根据传入的深度将数组展开. 对于不确定深度的数组,可以传入 ...

  4. Chrome导出导入书签

    Chrome导出标签 Chrome导入书签

  5. worksocket使用Nginx进行反向代理

    配置文件 map $http_upgrade $connection_upgrade { default upgrade; '' close; } upstream weoskceturl{ serv ...

  6. linux 设备文件的操作

    文件:包含数据,具有属性,通过目录中的名字被标识, 可以从文件读数据,可以向文件写数据. 设备也支持文件的操作. 每个设备都被当作一个文件,具有文件名,i-节点号,文件所有者,权限位的集合,最新修改时 ...

  7. 【LeetCode】1095. 山脉数组中查找目标值 Find in Mountain Array

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 二分查找 日期 题目地址:https://leetco ...

  8. 【LeetCode】1120. Maximum Average Subtree 解题报告 (C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS 日期 题目地址:https://leetcod ...

  9. 1269 - Consecutive Sum

    1269 - Consecutive Sum    PDF (English) Statistics Forum Time Limit: 3 second(s) Memory Limit: 64 MB ...

  10. StringBoot

    1.首先我们需要依赖SpringBoot父工程,这是每个项目中必须要有的. <!--引入SpringBoot父依赖--><parent>        <groupId& ...