美文网首页iOS 程序员随便Git
Git详解以及使用遇到问题解决

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

作者: Mccc_ | 来源:发表于2017-02-07 21:08 被阅读15905次

Git整体理解

Git代码管理是分布式管理方式系统.优点在于其极高的安全性和非常强大的分支管理.


整体流程图.png

1. 工作区(working directory): 就是本地的代码区,电脑能看到的目录,就是工作区.

2. 暂存区(Index):工作区下有一个隐藏的'.git'文件,其主要作用是存储Git自动创建的第一个master分支,还有指向master分支的HEAD指针.还有一个最重要的stage的暂存区.需要提交的文件修改通通放到暂存区,然后一次性提交到暂存区的所有修改.

3. 本地仓: 本地的个人仓库.管理着个人的代码的版本信息.

4. 远程仓: 线上的仓库.管理着推送到服务器的代码版本.

5. 过程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 --hard <commit号>index和working directory中的内容不作任何改变,仅仅把HEAD指向<commit>。这个模式的效果是,执行完毕后,自从<commit>以来的所有改变都会显示在git status的"Changes to be committed"中

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

暂存区->本地仓库
  • git commit -m '本次commit的描述'
本地仓库->暂存区
  • git reset <版本号> 利用版本库清空暂存区.原理:将当前分支重设(reset)到指定的<commit>或者HEAD(默认,如果不指定commit,默认是HEAD,即最新的一次提交)
  • --hard
    git reset --hard <commit号>重设(reset)index和working directory,自从<commit>以来在working directory中的任何改变都被丢弃,并把HEAD指向<commit>

  • --soft
    git reset --hard <commit号>index和working directory中的内容不作任何改变,仅仅把HEAD指向<commit>。这个模式的效果是,执行完毕后,自从<commit>以来的所有改变都会显示在git status的"Changes to be committed"中.退回到该次commit提交,但是该版本之后所有的修改都没有了,如果想要恢复,就要试图从还未关闭的终端中找到你想要的退回的版本号,或者用git reflog查找你想要的commit版本号.继续用git reset --hard <commit号>回退

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

git push

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

1.从线上拉项目到本地
git clone "项目的地址路径"克隆一个git管理的项目到本地
2.本地项目上传线上
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

冲突处理

1 <<<<<<<HEAD

1 + 1 = 2 这个区间内的内容是当前开发者修改的

2 =======

1 + 2 = 3 这个区间内的内容是其他开发者修改的

3 >>>>>>>

需要人工判断具体是删除或者保留哪一个修改内容.并且把1,2,3行提示删除掉.

Git分支操作

分支基本操作

1.分支的创建和切换

  • git branch "分支名" 创建一个分支 git checkout "分支名" 切换到该分支
  • 创建并切换到该分支 git checkout -b "分支名"

2.列出所有的分支

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

3.合并分支

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

4.删除分支

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

5.本地新建了一个分支要推送到线上,需要设置关联或者追踪.

  • 第一次push: git push origin 本地分支名:远程分支名

6远程端生成了一个新的分支,拉取到本地.

  • 先关联远程端分支到本地: git branch --set-upstream-to=origin/<线上分支名> <本地分支名>
  • 然后git pull

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}恢复指定的暂存

远程仓的操作

1.查看远程仓的信息
git remote
git remote -v 显示更详细的信息
2.将分支推送到远程仓
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 :refs/tags/<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 向下递归强制删除

相关文章

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

    Git整体理解 Git代码管理是分布式管理方式系统.优点在于其极高的安全性和非常强大的分支管理. 1. 工作区(w...

  • git命令以及踩坑大全

    按照使用踩坑记录逐渐增加命令知识,以及遇到的问题解决方案,文档会逐步增加信息。 1. git clone xxxx...

  • git资源学习

    git资源学习 Git详解之一 Git起步 Git详解之二 Git基础 Git详解之三 Git分支 Git详解之四...

  • Git命令清单 + 一张图掌握Git

    Git命令清单Git远程操作详解Git使用规范流程Git分支管理一张图掌握Git

  • github的使用总结

    常用 Git 命令清单Git远程操作详解 本地使用 创建 mkdir xxx 。 cd xxx git init ...

  • Git系列之初识Git与Github

    最近好多朋友跟我说想让我写一些关于Github以及Git的使用教程,其实之前写过一篇Git基础用法详解,不过由于篇...

  • Git 常用命令

    git命令详解 注意:比如git checkout -- ,事实上很多时候我们使用git ch...

  • GIt 常用操作指令

    《Git 使用规范流程》 《常用 Git 命令清单》 《Git 远程操作详解》 《Git工作流程》 开发过程中,用...

  • GIT操作结构

    git从开始的接触到熟练,以及常见问题解决方法

  • Python相关文章(5)

    环境部署 通过pycharm使用git[图文详解] pycharm使用github Pycharm连接Github...

网友评论

  • 小Q同学:哟,不错哦
  • aebcdbccf96d:写得真好,好想给你发红包啊
    Mccc_:@nullnilnil 哈哈。开玩笑。点个赞。我就满意了:smile:
    aebcdbccf96d:@满聪 但是没钱怎么办
    Mccc_:@nullnilnil 哈哈,文章下面有打赏。
  • 泷一一:收藏了,谢谢作者。
    文章标题不是还有使用git的问题解决吗?这一篇没提到,下一篇更新吗?
    泷一一:@满聪 我可以转载到我的博客中去吗?
    Mccc_:@泷一一 后面遇到的会继续更新
    Mccc_:基本上遇到的问题,我都写在了知识点中了
  • 丶桥豆麻袋:谢谢楼主,很实用,先收藏一波!
  • Benweii:写的很详细,不错:blush:不过发现了个错别字:一次性提交暂存区的“素”(所)有修改:smile:
    bcc19df19095:@满聪 😁
    Mccc_:@Benweii 已经修改了。谢谢:smile:
  • 小友_183c:正好想学习下git 的使用,讲得很清楚,学习了,谢谢楼主

本文标题:Git详解以及使用遇到问题解决

本文链接:https://www.haomeiwen.com/subject/zcvibttx.html