git 使用

一、获得GIT仓库

git init 
     会生成.git目录
git init --bare 
     不会生成.git目录,不允许在里面直接进行git操作
     一般用于远端仓库生成裸仓库
git clone <url>
    #clone一个远程仓库时会自动在本地生成一个名叫original的远程仓库,下载远程仓库的所有数据,并新建一个指向它的分支original/master,但这个分支我们是无法修改

二、GIT文件操作

在工作目录中的文件被分为两种状态,一种是已跟踪状态(tracked),另一种是未跟踪状态(untracked)。只有处于已跟踪状态的文件才被纳入GIT的版本控制。

GIT的三个工作区域:本地数据(仓库)目录,工作目录,暂存区

.git目录

里面保存了所有的版本信息等内容

staging area,暂存区

不对应一个具体目录,其时只是.git 中的一个特殊文件。

当我们修改了一些文件后,要将其放入暂存区然后才能提交,每次提交时其实都是提交暂存区的文件到git仓库,然后清除暂存区。

working driectory,工作目录

就是我们的工作目录,其中包括未跟踪文件及已跟踪文件

# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   lichee/linux-3.4/drivers/misc/FM34.c
#       modified:   lichee/linux-3.4/sound/soc/sunxi/audiocodec/sun8iw5_sndcodec.c
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       testfilea
no changes added to commit (use "git add" and/or "git commit -a")
1. 跟踪文件

加入到git管理中

git add <file> 
git rm --cached <file> # 取消不会删除文件
git rm -f <file>  #会删除文件
2.文件暂存
git add <file>...    #就可以暂存文件  
 git reset HEAD <file>... #取消暂存文件是

git checkout -- <file>...    #用stage的文件覆盖现在modify的文件

git diff --staged # 查看文件修改后的差异
3. gitignore
*.a  # 忽略所有 .a 结尾的文件
!lib.a # 但 lib.a 除外
/filename # 仅仅忽略项目根目录下的 filename 文件,不包括 subdir/filename
build/ # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:

git rm -r --cached .
git add .
git commit
4.储藏-Stashing

使用场景:

使用git的时候,我们往往使用branch解决任务切换问题,例如,我们往往会建一个自己的分支去修改和调试代码, 如果别人或者自己发现原有的分支上有个不得不修改的bug,我们往往会把完成一半的代码 commit提交到本地仓库,然后切换分支去修改bug,改好之后再切换回来。这样的话往往log上会有大量不必要的记录。其实如果我们不想提交完成一半或者不完善的代码,但是却不得不去修改一个紧急Bug,那么使用'git stash'就可以将你当前未提交到本地(和服务器)的代码推入到Git的栈中,这时候你的工作区间和上一次提交的内容是完全一样的,所以你可以放心的修 Bug,等到修完Bug,提交到服务器上后,再使用'git stash apply'将以前一半的工作应用回来。


git stash apply #将当前分支的最后一次缓存的内容释放出来,但是刚才的记录还存在list中

git stash pop #将当前分支的最后一次缓存的内容释放出来,但是刚才的记录不存在list中

git stash drop <stash@{id}> #删除stash。
git  stash clear #清除所有stash,
5.重排提交 rebase

通过衍合(rebase)可以修改多个提交的说明,并可以重排提交历史,拆分、合并提交。

HEAD表示当前所在的提交
^ 表示指定提交的父提交,这个提交可能由多个交提交,之后跟上数字表示第几个父提交,不跟数字等同于1。

n相当于n个^,比如3=^^^,表示第一个父提交的第一个父提交的第一个父提交。

 git rebase -i HEAD~2  或 git rebase -i 3366e1123010e7d67620ff86040a061ae76de0c8
删除

如果要删除某个提交,只需要删除相应的行就可以了,

修改说明

而要修改某个提交的提交说明的话,只需要把相应行的pick改为reward。

合并

pick改为squash就可以把这个提交全并到它上一行的提交中

拆分

这时要把pick改为edit,这样Git在处理到这个提交时会停下来,此时我们就可以进行相应的修改并多次提交来拆分

6. 撤销提交

如果某个提交已经Push到远程仓库 , 用 git revert <commit-id>

如果撤销本地提交

git reset [options] <commit>

    --soft: 只改变HEAD的State,不更改工作区与暂存区的内容
    --mixed(默认): 撤销暂存区的修改,暂存区的修改会转移到工作区
    --hard: 撤销工作区与暂存区的修改
git reset --soft HEAD^  #回到add之前, 还可以继续修改 commit

git reset --hard HEAD^ 

#恢复 
git reflog  #会显示SHA 
git reset <SHA>

7. cherry-pick , tag
git cherry-pick commit1
git tag -a V03
9. 远程提交
git push origin master

origin指定了你要push到哪个remote

master其实是一个“refspec”,正常的“refspec”的形式为”+<src>:<dst>”,冒号前表示local branch的名字,冒号后表示remote repository下 branch的名字。
注意,如果你省略了<dst>,git就认为你想push到remote repository下和local branch相同名字的branch。

 $git push origin master:refs/for/mybranch (在local repository中找到名字为master的branch,用他去更新remote repository下面名字为mybranch的branch)
 $git push origin HEAD:refs/for/mybranch (HEAD指向当前工作的branch,master不一定指向当前工作的branch,所以我觉得用HEAD还比master好些)
git fetch
git rebase origin/master  # 同步远端的代码和本地
git push origin master
patch两种方法
git diff
git diff > 1.patch
git apply 1.patch
git apply --check 查看补丁是否能够干净顺利地应用到当前分支中

diff生成的Patch兼容性强

format-patch
git format-patch -M master 0001-Fix1.patch
git am 0001-Fix1.patch #am会给出提示,并协助你完成打补丁工作

git format-patch的-M选项表示这个patch要和那个分支比对

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

推荐阅读更多精彩内容

  • 一、电脑本地初始化一个仓库 1. git init: 初始化一个电脑上本地仓库 终端进入项目目录,输入: 该命令将...
    dragon_li阅读 2,908评论 1 4
  • (预警:因为详细,所以行文有些长,新手边看边操作效果出乎你的预料) 一:Git是什么? Git是目前世界上最先进的...
    axiaochao阅读 1,931评论 1 8
  • git 使用笔记 git原理: 文件(blob)对象,树(tree)对象,提交(commit)对象 tree对象 ...
    神刀阅读 3,767评论 0 10
  • 今天跟爸比聊到这个词,爸比觉得很震惊,对于我来说,确是非常之正常。 啥也不说了。 那天下雨,提着东西,打着伞,没看...
    悦儿公主阅读 126评论 0 0
  • 有现场,才是好作文! 走进暑期班的课堂,有一种和以往上课不同的感觉,孩子们认真等待上课的场景惊到我了。每个孩子的习...
    潭客富林的家阅读 143评论 0 0