Git详解以及使用遇到问题解决

一. Git整体理解

Git代码管理是分布式管理方式系统.优点在于其极高的安全性和非常强大的分支管理.
整体流程图.png
  • 工作区(working directory): 就是本地的代码区,电脑能看到的目录,就是工作区.
  • 暂存区(Index):工作区下有一个隐藏的'.git'文件,其主要作用是存储Git自动创建的第一个master分支,还有指向master分支的HEAD指针.还有一个最重要的stage的暂存区.需要提交的文件修改通通放到暂存区,然后一次性提交到暂存区的所有修改.
  • 本地仓: 本地的个人仓库.管理着个人的代码的版本信息.
  • 远程仓: 线上的仓库.管理着推送到服务器的代码版本.

过程1: 由工作区<->暂存区

  • 工作区->暂存区:
    git add . 添加所有的修改或者git add <文件名>添加单个指定的文件修改到暂存区中.
  • 暂存区->工作区:
    (1)git rm --cached "文件路径" 不删除物理文件,紧将git的缓存删除.
    (2)git rm --f "文件路径" 不仅将该文件从缓存中 删除,还将物理文件删除(不会放到垃圾桶).
    例如: git rm -rf .DS_Store
    (3)git reset <版本号> 利用版本库清空暂存区.原理:将当前分支重设(reset)到指定的<commit>或者HEAD(默认,如果不指定commit,默认是HEAD,即最新的一次提交)
    --hard
    git reset --hard <commit号>重设(reset)index和working directory,自从<commit>以来在working directory中的任何改变都被丢弃,并把HEAD指向<commit>
    --soft
    git reset --soft <commit号>index和working directory中的内容不作任何改变,仅仅把HEAD指向<commit>。这个模式的效果是,执行完毕后,自从<commit>以来的所有改变都会显示在git status的"Changes to be committed"中

过程2:由暂存区<->本地仓库

  • 暂存区->本地仓库
    git commit -m '本次commit的描述'

  • 本地仓库->暂存区
    (1) git reset <版本号> 利用版本库清空暂存区.原理:将当前分支重设(reset)到指定的<commit>或者HEAD(默认,如果不指定commit,默认是HEAD,即最新的一次提交)
    (2) --hard
    git reset --hard <commit号>重设(reset)index和working directory,自从<commit>以来在working directory中的任何改变都被丢弃,并把HEAD指向<commit>
    (3) --soft
    git reset --soft <commit号>index和working directory中的内容不作任何改变,仅仅把HEAD指向<commit>。这个模式的效果是,执行完毕后,自从<commit>以来的所有改变都会显示在git status的"Changes to be committed"中.退回到该次commit提交,但是该版本之后所有的修改都没有了,如果想要恢复,就要试图从还未关闭的终端中找到你想要的退回的版本号,或者用git reflog查找你想要的commit版本号.继续用git reset --soft <commit号>回退

过程3: 由本地仓->远程仓库

git push

说明: 三种git add的区别

  • git add .提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
  • git add -u提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
  • git add -A: 提交所有变化

二. 在本地创建一个Git管理的项目

  • 从线上拉项目到本地
    git clone "项目的地址路径"克隆一个git管理的项目到本地
  • 本地项目上传线上
    git init
    git remote add origin "地址url"

三. Git上的常用查看操作

1.查看文本内容
cat <文件名>
2.查看git的状态
git status会告诉你在当前的分支上git的情况(有没有修改,修改的文件是什么等)

  learngit git:(master) git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean 

3.查看更详细的文件修改
git diff 查看所有文件的不同
git diff <文件名> 查看指定文件的不同
diff 是difference的缩写.只能查看还未add(还没加入到暂存区)的修改
4.查看所有的commit信息
git log
git log --pretty=oneline 更简洁的查看log信息(只有commit号和描述信息)
5.查看所有的git操作过的命令,可以找到删除了的commit号
git reflog
6.查看分支合并图
git log --graph

四. 冲突处理

<<<<<<<HEAD
1 + 1 = 2                         这个区间内的内容是当前开发者修改的
=======
1 + 2 = 3                        这个区间内的内容是其他开发者修改的
>>>>>>>
需要人工判断具体是删除或者保留哪一个修改内容.并且把1,2,3行提示删除掉.

五. Git分支操作

  1. 分支基本操作
  • 分支的创建和切换
    git branch "分支名" 创建一个分支 git checkout "分支名" 切换到该分支
    创建并切换到该分支 git checkout -b "分支名"

  • 列出所有的分支
    git branch 列出本地分支 用*标记当前的分支
    git branch -a 列出远程分支

  • 合并分支
    git merge "分支名"合并指定分支到当前分支
    git rebase "分支名"合并指定分支到当前分支
    两者的区别在于会不会保留分支操作的记录,前者记录,后者不记录.建议用merge

  • 删除分支
    删除本地分支: git branch -d "分支名"
    强制删除本地分支: git branch -D "分支名"
    删除远程分支: git push origin :<分支名> (危险命令哦)
    如果提示the branch XXX is not fully merged(XXX分支有没有合并到当前分支的内容)

  • 本地新建了一个分支要推送到线上,需要设置关联或者追踪.
    第一次push: git push origin 本地分支名:远程分支名

  • 远程端生成了一个新的分支,拉取到本地.
    git checkout -b 本地分支要起的名字 origin/远程分支名

六. bug分支

用issue作为分支的开头标记,当有一个bug出现需要改的时候,先拉取一个issue分支,修改并合并到开发分支上,然后删除issue分支.

七. feature分支

  • 开发新的功能的时候,最好拉去一个新的分支,以feature开头.
  • 丢掉一个没有合并过的分支,即删除分支.(当新功能正在或者已经开发完,领导突然说不要了...心累)
    git branch -D <分支名> 强制删除该分支内容

八. 暂存的使用

  1. git stash 暂存
  2. git stash list 查看所有的暂存
  3. git stash apply 从暂存开始执行,但是stash内容不会删除.
  4. git stash drop 删除暂存
  5. git stash pop 恢复暂存的同时删除暂存
  6. git stash apply stash@{0}恢复指定的暂存

九. 远程仓的操作

  • 查看远程仓的信息
    git remote
    git remote -v 显示更详细的信息
  • 将分支推送到远程仓
    git push origin 本地分支名:远程分支名

十. 标签的使用

标签只能在master分支上使用. 尽量写清楚所有的修改,为了万一的版本回退做好描述工作.
1.git tag <name>新建一个标签
2.git tag -a <name> -m "指定的标签信息"
3.git show <tag名字> 查看详细的tag信息
4.git tag 查看所有的tag名字
5.git tag -d <标签名字>删除一个标签
6.git push origin <标签名>推送标签到远程
7.git push origin --tags一次性推送所有未推送的标签
8.删除远程仓上的tag

  • 先删除本地的标签: git tag -d <tag名字>
  • 然后删除远程端的标签: git push origin :tag名字

十一 .gitignore的使用

iOS 用到的.gitignore https://github.com/github/gitignore/blob/master/Objective-C.gitignore

  • 在工作区创建一个名字为.gitignore文件.把要忽略的文件名字填进去,并提交到Git.Git会自动忽略这些文件的修改.把链接中的内容信息copy到.gitignore文件中.

  • 记住一定要把.gitignore拉取到具体的分支上才有用.

  • git check-ignore 检查ignore内容

  • git add -f <文件名>即使在gitignore中文件,也可以提交.

  • UserInterfaceState.xcuserstate,Breakpoints_v2.xcbkptlist 文件的忽略
    在. gitignore文件中加入
    工程名.xcodeproj/project.xcworkspace/xcuserdata/电脑名.xcuserdatad/UserInterfaceState.xcuserstate
    工程名.xcodeproj/xcuserdata/电脑名.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

如果配置完之后还没有忽略,那么就要清空缓存.
git rm -r --cached .
git add .
git commit -m 'update .gitignore'

十二 Git 配置全局信息

1.配置作者名称
git config --global user.name "Your Name"
2.配置个人邮箱
git config --global user.email "email@example.com"
3.配置git的颜色(文件名会标记上颜色)
git config --global color.ui true

十三. Git上需要注意的单词

  • repository 仓库
  • software 软件
  • mode 模式,风格
  • insertion 插入
  • commit 把...托给
  • stage 原意:舞台,Git中是暂存区的意思.
  • checkout 检出
  • branch 分支
  • modified 改进的,修改的
  • unstaged 还未加入到暂存区的 un + stage(暂存区)
  • untracked 无足迹的,还没有加入git管理的
  • origin 起源,起点
  • reset 重设
  • rebase
  • merge 合并
  • remote 遥远的,远程的
  • HEAD 表示当前版本
  • HEAD^ 上一个版本
  • HEAD^^ 上两个版本
  • HEAD~100 上100个版本

十四. Linux的一些简单操作和一些符号的解释

命令操作

  1. 目录/文件的操作
  • mkdir "目录名" 在当前路径下创建一个文件夹
  • mvdir "目录1" "目录2" 移动或者重命名一个目录 (如果目录2不存在,就直接修改目录1的名称为目录2)
  • rmdir "目录名" 删除一个目录
  • touch 创建一个文件
  • vim "文件名 编辑文件,如果文件不存在,就创建并进入编辑.
  • 删除一个文件
    sudo rm -rf <文件名> 在上帝权限下删除,可以删除一个该用户没有权限的文件(包括系统文件),不建议使用
    rm <文件名>能删除当前用户权限下的文件
  1. 转换目录
  • cd + "路径" 进入该文件目录下(也可以将文件直接拖进来)
  • cd .. 回到上级目录
  • cd . 当前目录 cd / 回到根目录
  • cd test.rtf 不可用. 不能cd到文件里.只能cd到目录.
    报错信息: -bash: cd: test.rtf: Not a directory
  1. 拷贝/移动/删除
    cp "需要拷贝的文件路径" "目标地址路径"
    拷贝文件 例如: cp /Users/goulela/Desktop/test.rtf /Users/goulela/Desktop/文件夹2
    mv "需要移动的文件路径" "目标地址路径"
    移动文件 例如: mv 文件夹2 /Users/goulela/Desktop/创建文件夹/文件夹
  2. 显示操作
  • file "文件名" 显示文件的类型

  • wc "文件名" 统计文件的字符数,词数,行数

  • pwd 查看当前所在的目录

  • ls 显示当前路径下有什么文件

  • ls + "目录名" 显示特定的路径下有什么文件

  • ls -w 显示中文

  • ls -l 详细信息

  • ls -a 显示所有文件,包括隐藏文件

  1. 时间操作
  • date 显示系统的当前日期和时间
  • cal 显示日历
  1. 网络与通信
  • ping "url" 给一个远程主机发送 回应请求
  • 终止ping打印 control + c
  • who 列出当前登录的所有用户
  • whoami 显示当前正进行操作的用户名

十五. 符号解释

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

推荐阅读更多精彩内容

  • 一、Git整体理解 Git代码管理是分布式管理方式系统,优点在于其极高的安全性和非常强大的分支管理。 工作区(wo...
    彭磊PL阅读 933评论 0 1
  • Add & Commit git init 初始化一个 Git 仓库(repository),即把当前所在目录变成...
    冬絮阅读 4,674评论 0 8
  • 查看、添加、提交、删除、找回,重置修改文件 git help # 显示command的help git sho...
    Swiftor阅读 2,030评论 0 2
  • Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不 需要...
    谢谢是我阅读 515评论 0 1
  • 以下笔记主要参考gitgot,大致了解git使用和原理。 第一部分我们从个人的视角去研究如何用好Git,并且揭示G...
    carolwhite阅读 2,288评论 0 1