Git 使用指南

1.什么是Git

1.Git是作为第三方应用代码托管平台,提供付费和免费两种服务

2.Git常用命令

2.1 Git配置

使用Git前准备 需要配置的用户名和密码

git config --global user.name "user.name"
git config --global user.email "user.email"

git config --global --unset user.name "username"     #移除用户

git config --global --unset user.email "email"      #移除邮箱

eg:
  user.name=15560028009@163.com   #账户号
  user.email=xxxxx                #密码


git config -l 查看当前电脑配置的用户信息

在本地库路径下  可以看到Git的配置
code  .git/config 

2.2创建本地仓库

git init 
git add .
git commit -m 'commit change'

2.2 clone一个远程库

 1).git clone URL
 2).查看Git地址 git remote -v
 3).替换Git地址 git remote set-url origin URL
 4).克隆指定分支  git clone -b remote_branchName URL
 5).更改clone到本地的库名 git clone URL newName

库的URL地址一般有两种形式 SSH 和 HTTPS
HTTPS:不管是谁,拿到url随便clone,但是在push的时候需要验证用户名和密码;
SSH:clone的项目你必须是拥有者或者管理员,而且需要在clone前添加SSH Key。SSH 在push的时候,是不需要输入用户名的,如果配置SSH key的时候设置了密码,则需要输入密码的,否则直接是不需要输入密码的。

使用Mac 生成ssh key 的流程

1).查看本地是否存在 ~/.ssh/路径
如果不存在 则需要创建 mkdir ~/.ssh
2).如果文件路径存在 则查看 id_rsa(私钥) id_rsa.pub(公钥) 是否成对出现 如是 则直接进入下一步
创建ssh key
ssh-keygen -t rsa -C "155xxxxxxxxx@163.com"
之后输入密码 一般推荐滤过
注:
ssh-keygen命令用于为“ssh”生成、管理和转换认证密钥,它支持RSA和DSA两种认证密钥。
-b:指定密钥长度;
-e:读取openssh的私钥或者公钥文件;
-C:添加注释;
-f:指定用来保存密钥的文件名;
-i:读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥;
-l:显示公钥文件的指纹数据;
-P:提供(旧)密语;
-q:静默模式;
-t:指定要创建的密钥类型。
3).添加SSH key 将生成的公钥到相应的库目录下
cat ~/.ssh/id_rsa.pub

2.3 添加忽略文件 .ignore

创建库的时候 最好提前添加的配置文件(不然协作开发后边提交代码会遇到很多问题)
 1.首先在文件夹目录下 创建 .ignore 文件 vim .ignore / touch .ignore 
 2.常见的文件命令
    参照:
    [ignore常见忽略文件]([ignore参考文件](https://github.com/github/gitignore/blob/master/Objective-C.gitignore))
> * 全局gitignore 路径为`/username/.gitignore_global`
> * 本地仓库gitignore  `.gitignore`
> * 强制添加gitignore 忽略的文件 `git add -f file_path`

.ignore 文件更新 的正确步骤

1、vim .gitignore  更新Gitignore文件
2、git rm -r --cached .  清除本地缓存
3、git add .gitignore  重新添加
4、git commit -'update .gitignore'
5、git push origin branch

2.4 Git查看本地文件常用命令

1.)查看本地状态 git status
2.) 查看本地分支 git branch## 标题 ##
3.) 查看远程分支 git branch -a
4.) 查看本地某一个文件的更改 git diff -HEAD 文件名

创建分支
  git branch new branch
  git checkout -b new branch  创建并切换到新分支
  git push origin new branch  将本地新创建的分支推送到远程 同步创建新分支
删除分支
  git branch -d branch
删除远程分支
    git push --delete origin BestPasswordManagement/1.0.0.2
    或者
    git branch -d BestPasswordMessagement/1.0.0
    git push origin :BestPasswordMessagement/1.0.0
    [删除分支遇到的问题][1]
    
更改本地配置的远程仓库的地址
    git remote  set-url origin https://....
    or 
    git remote set-url origin git@git....
    
更新分支名
    git branch -m old_branch new_branch # Rename branch locally 
git push origin :old_branch # Delete the old branch 
git push --set-upstream origin new_branch # Push the new branch, set local branch to track the new remote

2.5 版本管理

每次提交先stash,pull,stashpop 然后再commit,push
   添加更改
   git add .  添加全部的修改
   git add -f 添加修改的文件
   git log    显示提交的日志
注:
git add 的几种参数区别: 
git add -A 保存所有的修改 
git add . 保存新的添加和修改,但是不包括删除 
git add -u 保存修改和删除,但是不包括新建文件。 
上边的说法有待确认,git add -A 和 git add .测试之后是相同的效果 都是保存所有的修改

如果只想提交某个文件,可以使用git add 路径/文件名 或者 git add 路径/

   git checkout filename 该文件回退到上一个版本
   git checkout branch   切换分支
   git checkout commit_id  回退到commit_id提交版本  原来的提交并没有被还原 这时branch 提示 HEAD detached at xxxx  
版本回滚的方法:
1.如果提交的修改没有提交到暂存区
  git checkout .
  git checkout filepath
2.已经提交到版本库回滚到到某个版本
   git reflog  显示项目全部操作的日志  
   git reset --hard commit_id  强制回滚到某一版本
   git push -f branch  强制提交到远程  
   用上方法 log 日志也会被还原
注:log和reflog的区别
 log 提交的日志
 rflog 本地操作日志
撤销/重置部分修改
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库
如果没有提交工作区 可以使用git checkout .撤销所有的更改

合并分支

git merge branch1 将分支branch1合并到当前分支
merge合并的策略:
解决(Resolve)
递归(Recursive)
章鱼(Octopus)

我们的(Ours)
子树(Subtree)
git rebase  交互式
git rebase branch1
git rebase --continue
git rebase --abort
git rebase --skip 
git rebase -i  
合并提交

参考:[rebase 参考](https://www.codercto.com/a/45325.html)
清楚缓存
git rm -r --cached .
状态:Untracked

工作区(workspace) 和 暂存区(stage)
通过git add 将所有的修改添加到暂存区
git commit 将暂存区的修改添加到工作区


git add -i 进入交互式shell模式
1: status      2: update      3: revert(恢复)      4: add untracked
5: patch(补丁:针对一个文件上传部分修改)      6: diff(区别)      7: quit      8: help


Fast-Forward 模式
--no-ff

[git-merge完全解析](//www.greatytc.com/p/58a166f24c81)

当对提交的commit 不满意 需要重新编辑的时候 可以尝试该命令
git commit --amend  
git log --oneline  显示提交日志 且每次提交都一行显示
git patch  补丁
tag 标签  
默认为HEAD,也可以指定一个commit id;
git tag <tagname>  新建一个标签
git tag -a <tagname> -m 'xxxxx'  指定标签信息
git tag /git tag -l  查看所有的标签
git tag -d <tagname>  删除标签
git push origin --tags #推送到远程

git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销
作为一次最新的提交
    * git revert HEAD                  撤销前一次 commit
    * git revert HEAD^               撤销前前一次 commit
    * git revert commit (比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次提交进行保存。
git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容
git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。
git revert -m xxx commit_id

git reset/git reset --mixed commit_id  默认的方式 回退之前的版本 并保留之前的改动
git reset -–soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
git reset -–hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容Git进阶
git diff 查看版本的改动
git diff HEAD 查看当前版本的改动
git diff HEAD^ 相对上一个版本的改动
git diff fileName 查看file相对当前版本的改动
git diff HEAD fileName 同上
另一种写法 git diff HEAD~n fileName
当版本没有改动 还可查看两个版本改动的

2.6 关于stash

stash  
字面意: 贮藏  
目的/原理: 主要是将工作区修改的文件移到暂存区 以保证工作区的文件是"干净的"
使用场景: 当前分支为A, 如果在A分支修改了部分代码,临时需要切换到B分支,但不想立马将修改的代码提交
常用命令:
     git stash          将当前分支的修改贮藏
     git stash list     查看当前项目中stash 列表
     git stash drop stash@{0} 删除该stash 
     git stash pop  stash@{0} 释放该stash 
     git stash clear    清空项目中所有的stash

官网提供的相关指令集
git stash list [<options>]
git stash show [<stash>]
git stash drop [-q|--quiet] [<stash>]
git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]
git stash branch <branchname> [<stash>]
git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]
[-u|--include-untracked] [-a|--all] [-m|--message <message>]
[--] [<pathspec>…​]]
git stash clear
git stash create [<message>]
git stash store [-m|--message <message>] [-q|--quiet] <commit>

2.7 关于 reflog

写在开头
这些东西删除删除之后还可以恢复,有些东西没了就是没了,即使还有痕迹,已经没办法恢复了,且搬且珍惜。。。

关于分支的操作
常规操作
增  git checkout -b newbranchname
删  git branch -D branchname

git reflog 记录本地库操作的日志 (每一步切换 每一次修改)
就是因为这么详细所以 手欠的时候可以恢复数据

git checkout HEAD{n}  恢复上一次的操作 比如撤销某一次提交
git checkout newbranchname HEAD{n} 恢复某一次提交到新的分支 比如错手删除了一个分支

2.8 缓存

1.当我们需要删除暂存区或分支上的文件,同时工作区也不需要这个文件
git rm file_path

2. 当我们需要删除暂存区或分支上的文件,但本地有需要使用,只是不希望这个文件被版本控制(例如:.gitignore 文件)
git rm -r --cached file_path

3.遇到的问题

1.
No user exists for uid 501 fatal: Could not read from remote repository.
重启终端下就好 系统有更新的话 需要重启终端 更新下配置。

2. [!] The repo `BestSpecs` at `../../.cocoapods/repos/BestSpecs` is not clean

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

推荐阅读更多精彩内容

  • Git安装 Windows 设置用户名和邮箱 $ git config --global user.name "Y...
    飘忽无涯阅读 292评论 0 1
  • git命令 版本控制 Git 简介 Git是目前世界上最先进的分布式版本控制系统。如果你是小白,请先看这里: ...
    草帽lufei阅读 1,032评论 0 0
  • 一.仓库选择 这里我选择的是码云,中国版github,因为他的服务器在国内,上传和下载的速度要快一些。链接:htt...
    朱敏_ITer阅读 559评论 5 7
  • [TOC] 前言 刚刚开始使用Git的版本控制时,我根本不确定我付出那么多时间是不是会得到回报,Branch、St...
    木猫尾巴阅读 7,465评论 6 36
  • 这些日子里,我睡不着,也不困,好像身体和灵魂分离开了。 夜里,我会在床上辗转反侧很久,然后进入梦中,重复的,停不下...
    0c390c038846阅读 291评论 0 0