文档章节

Git常用指令记录

go-skyblue
 go-skyblue
发布于 2015/12/16 19:11
字数 1167
阅读 263
收藏 13
git

简介

git有漂亮的WEB界面

非常自由的本地commit(不用担心是否影响到他/她人) 操作稍微复杂了一点点。

git属于分布式的版本管理工具。每个人都有全部的提交历史。

通过git push 和 git pull 将更新提交到远端

git的使用参考

参考: http://www.bootcss.com/p/git-guide/

入门

  1. 安装客户端(https://git-scm.com/downloads)
  2. 创建一个仓库 其中一种方法 创建一个目录 your-project 在目录下面执行命令 git init 第二种方法 git clone <仓库的地址>
  3. 添加与提交 git add * git commit -m “add some file"

1.4 推送改动 添加仓库的地址(如果不是clone出来的仓库,需要初始化下origin的地址)

git remote add origin <git-repo-server-addr>

推送

git push origin master

git的默认分支就是master(通过git branch可以查看当前的分支) 这句命令的意思就是将master分支里的内容,推送到名叫origin的远程仓库去。

工作流

  • working dir(工作目录):持有实际文件
  • index(暂存区):临时保存你的改动
  • HEAD:指向最后提交的结果

如何回退

从工作目录到暂存区

git add <file-name>

从暂存区到HEAD

git commit
git reset HEAD~   # 执行后,就行没有commit一样
git reset --hard HEAD~  # 这个有点暴力,执行后,就像你所有的修改也都没了

改动没有提交

git checkout <your-filename>

改动已经提交

git reset --hard HEAD~ # 放弃一次提交
git reset --hard HEAD~2  # 放弃两次提交
git reset --hard <sha-版本号> # 回滚到某个版本号

还有一种办法处理以及提交的问题(最新研究出来的)

# 查看历史,找到需要回滚到的版本
git log

# 回到那个版本, 注意后面那个 "."
git checkout <sha> .

# 然后commit就好了
git commit -am "...."

冲突的处理

使用文本编辑器,打开冲突的文件

处理完冲突后,

git add <冲突的文件>  # 跟svn比,没有svn resolved这一步
git commit -m “提交记录” 

如果执行了git merge,但是想放弃一次代码合并

git merge --abort

分支管理

创建,并却换到新的分支(如dev分支)

git checkout -b dev

却换回来(默认的分支是master)

git checkout master

合并分支的内容

git merge dev

如果有冲突,参考上面的,人肉处理就好了 删除远程分支(删除test)

git push origin :test

git的常用配置

git config --global color.ui true

设置忽略文件列表

ref: http://git-qa.gz.netease.com/gzleiyingfeng/git_course/tree/master

直接把需要忽略的文件列表放到.gitignore文件里就可以了

$ cat .gitignore
# frameworks/base    # 此为注释,被git忽略
*.a                  # 忽略所有.a结尾的文件
!lib.a               # 但lib.a除外,!
build/               # 忽略build目录下的所有文件
doc/*.txt            # 忽略doc目录下的所有.txt结尾文件,但不包含doc/notes/*.txt
/TODO                # 仅忽略项目根目录下的TODO文件,但不包含subdir/TODO

提交pull request

如何为一个commit提交pr

参考

  1. fork 一份代码(假定为 myfork ),myfork的主干始终和oschina-url的主干保持一致。

    1. 如何保持和主干的代码一致

      1. 设置upstream remote:git remote add upstream oschina-url
      2. 直接pull upstream remote: git pull upstream master
    2. 查看变更后更新

      git fetch upstream master
      git diff master FETCH_HEAD
      git merge FETCH_HEAD
      
  2. 新建 feature 分支,有任何修改都在该分支上进行开发。

  3. 从 upstream 的主干新建一个要 pr 的分支(假定为 pr-example),提取 feature 分支中要 pr 的修改。

    查看 feature 分支要pr的提交: git log (假定hash为 e1ad54d)

    # 创建pr-example分支
    git checkout -b pr-example upstream/master
    # 分支提取提交
    git cherry-pick e1ad54d
    # 提交到远程仓库
    git push -u origin pr-example
    
  4. 通过 pr-example 分支向 upstream 的主干发起 pull request。

  5. pr被接受之后,删除该分支

    git branch -d pr-example
    # 删除远端分支
    git push origin :pr-example
    

cherry-pick 使用:

  • 提取指定分支的 HEAD 提交:git cherry-pick totoro
  • 提取指定分支的 HEAD 往前 n 个提交:git cherry-pick totoro~n
  • 提取多个连续提交:git cherry-pick A..B,如 git cherry-pick totoro~4 totoro 会提取 totoro * 分支上 HEAD 前4个和 HEAD 本身共5个 commit,git cherry-pick e296145..a649050 会提取 e296145 和 a649050 之间(含)的所有 commit。

更多用法请参考git help cherry-pick

(注: pr是pull request的简称)

其他

ref: http://www.yangzhiping.com/tech/github.html

修行之道 关注大师的言行, 跟随大师的举动, 和大师一并修行, 领会大师的意境, 成为真正的大师。

其他优秀的资料

© 著作权归作者所有

共有 人打赏支持
上一篇: 预言
下一篇: gohttp
go-skyblue

go-skyblue

粉丝 81
博文 50
码字总数 31881
作品 5
杭州
程序员
私信 提问
Git 常用指令

查看、添加、提交、删除、找回,重置修改文件 git help <command> # 显示command的help git show # 显示某次提交的内容 git show $id git co -- <file> # 抛弃工作区修改 git co . # 抛弃工作...

kindcao
2015/09/30
105
0
GIT科普系列3:底层存储机制Internal Objects

题记: 近期连续写了几篇关于git的博文,大多从日常使用过程中遇到的难点入手(例如冲突、回滚、放弃本地修改),目的是希望能够让大家从博文中找到可以直接用于实战的经验,因此并没有像其他...

zssureqh
2016/08/06
0
0
GIT科普系列4:仓库/缓冲区/工作副本,傻傻分不清楚?

背景: 公司内部主要以Git作为版本管理工具,在日常工作中发现大家使用Git很不熟练,而且学习的积极性不高,似乎GIT给人以一种望而却步的感觉。究其根源(个人臆测)有几点: 一、以为GIT相较...

zssureqh
2016/09/17
0
0
GIT科普系列5:index in git

背景: git的使用其实没有想象中的那么复杂,平日里真正使用的指令都是极少数、最简单格式的。之所以使用过程中感觉操作复杂、冲突不断,究其根源是对git的设计理念缺乏了解,没有搞清楚git...

zssureqh
2016/11/06
0
0
Git学习记录 力做全网最强入门教程

目录 Git学习记录 力做全网最强入门教程 什么是GitHub? Git的配置 至此我们的入门教程到此结束,更新中级教程要等欧 Git学习记录 力做全网最强入门教程 什么是GitHub? 若您在不知道Git是什么...

Chicago_01
2018/08/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

毕业季,我的Linux求职之路

秋招终于告一段落了,本硕的七年求学之路也快画上了句号。回首求职的这一段日子,痛苦并快乐着。感谢所有陪伴着我走过这一段路程的同学,所有的辛酸都值得铭记。求职的过程中在网上看了很多的...

linux-tao
22分钟前
0
0
Mybatis动态语句,if test字符串不用进行null判断

描述:根据creator列进行过滤获取image表的数据。 代码如下: @Select("<script>" + " select * from image " + " <where>" + " <if test='isAllCreator != 1'> ......

Coder顾
41分钟前
0
0
写了2年python,知道 if __name__ == '__main__' 什么意思吗?

相信刚接触Python的你一定有过如此经历,把所有的代码都写在 if __name__ == '__main__'下,因为有人告诉你,这样比较符合 Pythonista 的代码风格。 殊不知这段代码的意义并不是一定要存在于...

上海小胖
49分钟前
4
0
zkong笔记18

这两天的主要工作: Elasticsearch初探 接受ESL的超管功能 ERP开源系统调研

莫在全
53分钟前
1
0
tpcc-mysql的安装和使用

# tpcc-mysql的安装和使用 前言 公司要做Mysql方面性能调优,大概浏览一下Mysql一些参数设置后,想开始尝试进行调整测试。但发现一个问题,测试缺乏标准。所以需要一些基准测试标准或者工具。...

紫暘
57分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部