Git 操作指南

仓库操作

新建仓库

git init

实质:新建一个.git目录,所有git有关的信息都在里面。

克隆仓库

git clone

查看远程仓库

git remote -v 

添加远程仓库

git remote add [name] [url]

name 通常为origin

删除远程仓库

git remote rm [name]

修改远程仓库

git remote set-url --push [name] [newUrl]

拉取远程仓库

git pull [remoteName] [localBranchName]

推送远程仓库

git push [remoteName] [localBranchName]

本地分支操作

查看分支

git branch

创建分支

git branch branchName

切换分支

git checkout branchName

删除分支

git branch -d branchName

合并分支

git checkout master
git merge dev 

文件操作

工作区 暂存区 历史区

查看状态

 git status

添加追踪

git add filename
git add .

删除文件

git rm 

移动文件

git mv file the/new/path/

重命名文件

git mv file newfile

提交修改

git commit -m 'commit log'

远程分支操作

获取远程分支

git checkout -b [name] [remoteName] 

例如:

git checkout -b myNewBranch origin/dragon

git 1.6版本以后,有简化的命令:

git checkout --track origin/[remoteName]

直接在本地检出与远程分支名字一致的分支。

跟踪远程分支

git branch --set-upstream-to=origin/<remoteBranchName> localBranchName

备注:如何查看跟踪关系,使用如下命令

    git config --list

拉取远程分支到本地

git pull origin remoteBranchName:localBranchName

推送本地分支到远程

git push origin localBranchName:remoteBranchName

如果remoteBranchName远程分支不存在,则在远端自动创建。

推送当前分支到远程

git push origin remoteBranchName

同理,如果remoteBranchName远程分支不存在,则在远端自动创建。

备注:通常我们都直接用git push,不带后面的参数(建立好了追踪关系)。

删除远程分支

git push origin :remoteBranchName

git配置文件

用户配置文件位置

~/.gitconfig

查看配置信息

git config --list

配置用户名和密码

git config --global user.name gzchenquanbin
git config --global user.email gzchenquanbin@corp.netease.com

开启颜色显示

git config --global corlor.ui true

配置编辑器

git config --glabal core.editor emacs   #默认为vi或者vim

配置比较工具

git config --global merge.tool vimdiff

其它技巧

查看差异

git diff                               #显示的是工作区和暂存区的差别
git diff --stat                        #只显示差别的统计信息,不详细显示
git diff --cached/staged               #显示的是暂存区和仓库的差别,也就是下次commit的内容
git diff HEAD                          #显示的是工作区和仓库的差别
git diff HEAD file                     #显示的是工作区和仓库指定文件(目录)的差别
git diff commitId file                 #显示的是工作区
git diff commitId1 commitId2           #比较两次commit之间的差异
git diff commitId1 commitId2 file      #比较两次commit之间某个文件的差异
git diff branch1 branch2               #比较两个分支上的最新提交
git diff branch                        #比较当前分支与指定分支的当前目录差异
git diff branch file                   #比较当前分支与指定分支的指定文件(目录)差异

查看提交日志

git log
git log -2   #查看最近两次的提交日志

查看某次提交的详细修改

git show commitId

修改撤销

  • 只在工作区修改,还没有add到暂存区

     git checkout -- file
    
  • 已经add到暂存区

     git reset HEAD file
    

    备注:之前的修改被回退到工作区

  • 已经commit到仓库

     git reset --hard HEAD^          #回退到上一个提交
     git reset --hard HEAD^^         #回退到上上一个版本
     git reset --hard HEAD~10        #往前回退10个版本
     git reset --hard commitID       #指向任意一个提交
    
  • 已经push到远端

     sorry,无能为力了
    

藏匿与恢复

git stash
git stash pop 

.gitignore文件

项目中经常会生成一些Git系统不需要追踪(track)的文件。典型的是在编译生成过程中 产生的文件或是编程器生成的临时备份文件。
当然,你不追踪(track)这些文件,可以 平时不用"git add"去把它们加到索引中。 但是这样会很快变成一件烦人的事,你发现 项目中到处有未追踪(untracked)的文件; 这样也使"git add ." 和"git commit -a" 变得实际上没有用处,同时"git status"命令的输出也会有它们。
这时,你可以在你的顶层工作目录中添加一个叫".gitignore"的文件,来告诉Git系统要忽略 掉哪些文件,下面是文件内容的示例:

# 以'#' 开始的行,被视为注释.
# 忽略掉所有文件名是 foo.txt 的文件.
foo.txt
# 忽略所有生成的 html 文件,
*.html
# foo.html是手工维护的,所以例外.
!foo.html
#  忽略所有.o 和 .a文件.
*.[oa]
#忽略文件夹(所有的.idea子目录)
.idea/
# 如下的只忽略根目录下的.idea目录
/.idea/

.gitignore不生效怎么办

有时候在项目开发过程中,突然心血来潮想把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:

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

推荐阅读更多精彩内容

  • git常用命令 GIT常用命令备忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章阅读 8,471评论 1 26
  • 记忆中那意义非同凡响的铃声响起的那一刻,一出门,我看到夏初黄昏独有的温柔而明亮的光芒,那是我在迄今的人生中认真看过...
    步青城阅读 317评论 5 7
  • 这条音频给你讲讲2016年宇宙的变化。 我们知道,一年的时间对宇宙来说是非常短暂的,天文学上的很多事件都要以几千...
    73feb922c323阅读 156评论 0 0
  • 欢乐颂剧终,樊胜美终于跟王柏川分手了,看到樊大姐的变化,我真的觉得要拿起小板凳鼓个半小时的掌。 在...
    黏玉米阅读 234评论 0 0
  • 天色完全暗了下来,华灯已上,霓虹闪烁,街道上形形色色的人都匆匆忙忙往家里赶,脸上的表情显得疲惫不堪,嘴角没有一点的...
    九岁V阅读 379评论 0 0