Git

简介(Git 分布式工作流程)

与传统的集中式版本控制系统(CVCS)相反,Git 的分布式特性使得开发者间的协作变得更加灵活多样。 在集中式系统中,每个开发者就像是连接在集线器上的节点,彼此的工作方式大体相像。 而在 Git 中,每个开发者同时扮演着节点和集线器的角色——也就是说, 每个开发者既可以将自己的代码贡献到其他的仓库中,同时也能维护自己的公开仓库, 让其他人可以在其基础上工作并贡献代码。 由此,Git 的分布式协作可以为你的项目和团队衍生出种种不同的工作流程;


Git 分布式开发示意图

)

一.Git学习链接

Git的官方网站
MAC安装
Windows

二. Git初始化

当使用一台新的机器,且从没有使用过git。

  1. 首先从官网下载Git工具,Xcode自带不用下,Intellj工具族需要下载安装。
  2. 安装好执行git config --global user.name “xxx” 配置git账户名
  3. git config --global user.email 'xxx' 推荐 这里填写你常用的邮箱账号作为你git的账户name
  4. git config --global --edit //可以直接修改全局的用户名和邮箱

三. 新建代码工程

以iOS开发为例
1.桌面新建一个工程名称为App 终端进入App目录
2.去GitHub网站建立自己的共有仓库

注册账号之后新建仓库.png
创建成功之后的页面.png

3.Git初始化工程病进行第一次提交
3.1终端操作

Last login: Tue Sep 12 10:54:52 on ttys003
hongjunzhangdeMacBook-Pro:~ hongjunzhang$ cd Desktop/App
hongjunzhangdeMacBook-Pro:app hongjunzhang$ ls
app     app.xcodeproj   appTests    appUITests
hongjunzhangdeMacBook-Pro:app hongjunzhang$ git init
hongjunzhangdeMacBook-Pro:app hongjunzhang$ git add README.md
hongjunzhangdeMacBook-Pro:app hongjunzhang$ git commit -m "first commit"
hongjunzhangdeMacBook-Pro:app hongjunzhang$ git remote add origin https://github.com/zhj1214/dasdsadasfa.git
hongjunzhangdeMacBook-Pro:app hongjunzhang$ git push -u origin master

3.2再啰嗦一句
之后的代码修改和提交 请按照以下步骤:

git add .
git  commit -m'备注日志'
git pull
git push

四.多人合作处理冲突

多人合作时当我们使用git pull合并他人代码的时候有可能就会发生冲突

#使用git status查看那些文件有冲突
git status
# git diff 查看文件修改的内容
git diff

Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改如下后保存:
4.1分别进入到每一个文件中,手动修改冲突的部位。修改完毕后,执行:

git add .
git commit -m'备注'
git pull
git push

4.2 某个文件你想使用对方/自己的版本

git checkout - -theirs xxx/A.js // 抛弃乙的版本,完全采用自己的
git checkout - -ours xxx/A.js// 抛弃自己的版本,保留乙的

Git官网 冲突操作

五.操作分支

  • 新建分支
    git branch 分支名(不会切换到新的分支)
    git checkout -b 分支名(会同时切换到新的分支)
  • 查看已有分支
    git branch -a
  • 切换分支
    git checkout 分支名
  • 将本地分支推到远端服务器
    git push --set-upstream origin xxx
  • 强制(覆盖)推到远端仓库
#把master分支内容强制覆盖远端master
git push -u origin master -f
#将本地dev分支强制覆盖远端master分支
git push origin dev:master -f
  • 删除远程分支
git push origin --delete 分支名字
  • 刷新本地分支
git remote update origin --prune
  • 删除本地所有与远程仓库同步分支(本地修改过未提交的不会删除)
git branch |xargs git branch -d
  • git merge:


    master 合并了 xxx分支

六. commit日志

  • 你还可以通过打开引号,按Enter并再次关闭带引号的提交来实现相同的提交结构,包括标题和正文(多行)
git commit -m "commit title
>
> commit description"
  • 提交历史纪录
    git log
  • 提交版本记录
    git reflog
  • 查看所有的提交记录 以及完整的 git comitid
    git log --pretty=oneline
  • 用git log --graph命令可以看到分支合并图
    git log --graph
  • 查看远端仓库地址
    git remote -v
  • 合并某个节点的代码
git cherry-pick c75b60957e0867d317cc783943519662824d42f4
  • 取消 上次的 commit (数组代表那一次)
git reset --soft HEAD~1
#reset 扩展
至于这几个参数:
--mixed 
意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
 
--soft  
不删除工作空间改动代码,撤销commit,不撤销git add . 
 
--hard
删除工作空间改动代码,撤销commit,撤销git add . 
注意完成这个操作后,就恢复到了上一次的commit状态。
 
git merge --abort 
如果合并报错有冲突则使用这个
 
顺便说一下,如果commit注释写错了,只是想改一下注释,只需要:
git commit --amend
此时会进入默认vim编辑器,修改注释完毕后保存就好了。

七. 版本回退

注意:版本回退在多人开发时一定到通知到所有人,让大家删除本地分支,重新拉去远端的分支代码

# 回退到某个节点
git reset --hard xxx(版本记录号comitId)
# 回退后 常规操作如下:
git add .
git commit -m''
git push;
#xxxx 推送到远端分支名称
git push origin HEAD:xxxx -f

八. 跟踪文件

#取消跟踪文件
git update-index --assume-unchanged your_file_path
#继续跟踪文件
git update-index --no-assume-unchanged your_file_path

九. 创建标签

在Git中打标签非常简单,首先,切换到需要打标签的分支上:
1.查看所有tag

git tag

2.增加标签
增加标签之前请先commit 当前所有内容,或找到历史提交的commit id给指定记录增加标签

#末尾可加 commit id, 这个id不是必须的
git tag -a v0.0.1 -m '第一个标签' <commit id>

注意,标签不是按时间顺序列出,而是按字母排序的。可以用git show <tagname>查看标签信息:
3.删除标签

#删除本地标签
git tag -d v1.0
#删除远端标签
git push origin :refs/tags/v1.0

十一. rebase

  • 使用rebase 删除指定commit记录
git rebase -I xxxxxxxxxxxx
#解决冲突
git add .;
git commit -m’提交’
git push origin HEAD:xxx  -f

十二. 些常用命令

  • 移除远程提交的npm包文件
git rm --cached -r node_modules/ 
  • 误删恢复
#删除文件 
rm -rf README.md  
#当然可以撤销 这个删除恢复删除的文件
git checkout -- README.md
  • git stash
    并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办?幸好,Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:
#执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。
git stash save "save message"
#显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}
git stash show
#应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1} 
git stash apply
#暂存列表
git stash list
#删除并应用   脏代码
git stash pop stash@{0} 
#删除这个脏代码
git stash drop stash@{0}
#删除所有缓存的stash
git stash clear

实际上,Git还有很多可配置项。

比如,让Git显示颜色,会让命令输出看起来更醒目:
git config --global color.ui true

  • 快捷 方法
    有没有经常敲错命令?比如git status?status这个单词真心不好记。
    如果敲git st就表示git status那就简单多了,当然这种偷懒的办法我们是极力赞成的。
    我们只需要敲一行命令,告诉Git,以后st就表示status:
git config --global alias.st status
#最变态的 查看提交记录方法 
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
  • 切换到远程分支
#列出所有分支名称如下:
git branch -a
remotes/origin/dev
remotes/origin/release
#作用是checkout远程的dev分支,在本地起名为dev分支,并切换到本地的dev分支
git checkout -b dev origin/dev
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,738评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,377评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,774评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,032评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,015评论 5 361
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,239评论 1 278
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,724评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,374评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,508评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,410评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,457评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,132评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,733评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,804评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,022评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,515评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,116评论 2 341

推荐阅读更多精彩内容

  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,643评论 4 54
  • 今天写了一篇自己不擅长,也不了解的毛概作业——我论今日之中国国情。用典型实际说明社会主义制度的优越性。 作为一名理...
    丹阳world阅读 979评论 0 0
  • 在去接傻狗的路上。 最近一直在投简历,笔试这种焦虑中度过,大学毕业的时候,觉得自己找不到工作,选择了考研,研究生要...
    树荫下的柠檬阅读 160评论 0 0