MAC端Git安装,命令使用以及环境搭建

MAC上的git配置,配置用户名和用户邮箱,以后每次与Git的交互都会使用该信息。

 

git config --global user.name "your_name"  
git config --global user.email "[email protected]"

配置信息可以更改,以后想要更改使用上面指令就可以。同时可以使用git config --list指令查看Git的配置信息。

Git默认是大小写不敏感的,也就是说,将一个文件名某个字母做了大小写转换的修改Git是忽略这个改动的,导致在同步代码时候会出现错误,所以建议大小把Git设置成大小写敏感。

git config core.ignorecase false

生成密钥

Git关联远端仓库时候需要提供公钥,本地保存私钥,每次与远端仓库交互时候,远端仓库会用公钥来验证交互者身份。使用以下指令生成密钥。

ssh-keygen -t rsa -C "[email protected]"

生成密钥后,在本地的/Users/当前电脑用户/.ssh目录下会生成两个文件id_rsaid_rsa.pubid_rsa文件保存的是私钥,保存于本地,id_rsa.pub文件保存的是公钥,需要将里面内容上传到远端仓库。

获取公钥字符串具体操作如下图。


图-1 获取公钥

  • 输入cd指令,进入当前用户目录
  • 输入ls -a指令,查看当前用户目录下所有文件,包括隐藏文件
  • 输入cd .ssh指令,进入.ssh目录
  • 输入ls指令,查看.ssh目录下的文件
  • 输入cat id_rsa.pub指令,查看id_rsa.pub文件中内容

远端仓库添加密钥

以GitHub为例子,向远端仓库添加公钥,上面已经获取到了公钥,只需要将公钥添加到远端仓库就可以了。


图-1 添加公钥

在个人设置页面,左边选中SSH and GPG keys,在右边添加公钥,title是key的名称,可以随便取,可更改,key是上面我们获取到的公钥,填写完毕后点击add SSH key按钮,这样远端就添加到了密钥。然后实验操作:本地关联远端仓库

  • 在本地文件夹下面执行git init指令,初始化文件夹,作为本地的一个仓库。
  • 执行git remote add origin 仓库的ssh链接
  • 执行git pull指令,将远端代码拉取到本地

执行完毕后,远端仓库代码已经同步到了本地。

简洁图文说明

MAC端Git安装,命令使用以及环境搭建_第1张图片

常用Git指令

  • 初始化配置

    git config —global user.name “XXX"
    git config --global user.email “XXXX"
  • 设置大小写敏感

    git config core.ignorecase false
  • 生成密钥

    ssh-keygen -t rsa -C “your_email”
  • 将远端代码clone到本地目录(如果要是自己创建的仓库,参考上传到github上的Demo操作:将项目Demo上传到Github上的操作步骤_hbblzjy的博客-CSDN博客

  • (从这里开始,是很很很重要的命令行,要记住!!!)配置完ssh-key,首先 cd 本地文件夹地址(新建一个本地文件夹,最好不要有中文)

  • 然后git init(如果此文件夹没有操作过)

  • (git config —global user.name “XXX"
    git config --global user.email “XXXX“)如果在之前输入过,这里可要可不要

  • 然后git clone <远端git——ssh地址(http地址下载)> 

  • 这个时候,我们clone下来的是主支master代码,但是有时候我们需要在分支上修改代码、提交。这个时候怎么办?怎么拉取分支的代码?1、首先打开我们clone下来的master代码的文件夹下的终端:cd 代码根目录文件夹地址;2、然后查看分支列表:git branch -l :查看本地分支//git branch -r :查看远程分支//git branch -a :查看全部分支(远程的和本地的)(我一般使用第三个命令),这个时候列表的第一行显示的应该是:* master;3、找到分支名称,执行:git checkout -b 分支名称 origin/分支名称;4、验证,查看分支列表:git branch -a,可以看到第一行显示的是:* 分支名称;5、如果想回来,那么:git checkout master,然后还可以查看分支列表验证;如果还想切换回原来下载过的分支,执行git checkout 分支名称;新的用:git checkout -b 分支名称 origin/分支名称;

  • 终端:cd 项目文件夹地址(以下四行命令,是修改代码后需要进行的操作,很重要!!!要记住!!!)

  • 先拉取 git pull

  • git add <文件> // 将有修改的文件添加到本地缓存中 git add . 是添加所有修改
    git commit -m "本次修改信息" // 提交本次修改,一般是在git add之后操作

  • 推送修改的文件:git push

  • (在你保存更改要push的时候,别人有提交,先执行git pull --rebase,修改冲突提交,然后push
    如果你更改了还没提交,别人有提交,先git pull,修改冲突提交,然后push,如果出现问题,退出填写提交信息,git log查看你拉取了哪些更新日志,如果日志下面有 :  q退出,然后git reset (pull之前本地最新日志对应的代码前六位)--soft/hard,--soft表示保存本地更改,--hard表示不保存本地更改)

  •  git reset . // 撤销add
    git rm --cached . // 撤销add
  • 切换已经在本地的分支

    git checkout 
  • 以当前分支为蓝本新建本地分支并切换到新分支

    git checkout -b 
  • 本地没有,然后拉取远端存在的分支,并建立联系

    git checkout -b  origin/
  • 当前分支合并其他分支

    git merge 
  • 当前分支合并某个分支(包含当前分支)的一个commit或多个连续的commits

假设有 主支master 和 分支firstTree 两个代码仓库:
提交结果如下:
主支master:提交ID0---提交ID1---提交ID2---提交ID3---提交ID4
分支firstTree:提交ID5---提交ID6---提交ID7

主支master合并分支firstTree某一个commit:
1、先切换到firstTree,然后查看firstTree的提交日志git log,记住想要合并的commit id,比如:提交ID6;
2、再切换到master,然后执行:git cherry-pick 提交ID6
3、此时合并已完成

注意:
如果你cherry-pick的是别人分支的commit id,可能会遇到错误fatal: bad object ...,那是因为
cherry-pick是本地特性,本地要有这个commit id才可以被git cherry-pick。如果没有这个commit id,
就会出现这个错误。所以一定要保证本地有想要合并的分支仓库,且分支仓库包含要合并的commit id,即保证
拉取到最新的分支代码(git pull)。

主支master合并分支firstTree多个连续的commits:(也可以通过多次执行cherry-pick实现,当然这个属于笨方法)
1、同上;
2、基于firstTree创建一个新的分支,并指明新分支的最后一个commit id:
git checkout -b newBranch 提交ID6
3、rebase这个新分支的commit到master(--onto master)
git rebase --onto master 提交ID5^
(提交ID5^:从提交ID5开始)
4、此时master已经合并了 提交ID5到提交ID6 的内容;
  • 远端新建分支,其实就是将本地分支推送至远端,所以要先建本地分支,最后与远端建立联系

    //不简写命令:这个可以随意定义远端分支的名称
    git branch  //创建新的本地分支
    git checkout  //切换到新建的本地分支
    git push origin : //以新建的本地分支为蓝本,创建新的远端分支
    //本地和远端建立联系
    git branch --set-upstream  origin/
    //或者
    git branch --set-upstream-to=origin/ 
    
    //简写命令:这个远端分支的命名都和本地分支名一样
    git checkout -b  //创建新的本地分支,并切换到新建的本地分支
    git push --set-upstream origin  //以新建的本地分支为蓝本,创建新的远端分支,并建立联系
    
    
    
  • 删除远端分支,其实就是推送了一个空的分支到远端覆盖了原来的远端分支

    git push origin :
  • 本地没有,然后拉取远端存在的分支,并建立联系

    git checkout -b  origin/
    // 或者
    git branch —track  origin/
  • 任意的一个本地分支和任意的一个远端分支都可以建立对应关系

    git branch --set-upstream  origin/
  • 添加远端库

    git remote add <远端库代称> <远端库地址>
    git clone <远端库地址> <目录>   //不需要git init
  • 撤销操作

    git reflog查看 操作记录,
    git log查看 提交过的版本信息,
    而git reflog可以查看所有分支的操作记录,包含已经被删除的commit记录。
    
    
    回滚操作,要先理解四个位置:工作区 -- 暂存区 -- 本地仓库 -- 远程仓库
    工作区修改代码,提交时先使用 "git add" 提交至暂存区,
    再通过 "git commit " 提交至本地仓库,“git pull”拉去远端仓库和本地仓库对比,如果有冲突,解决冲突,然后再重新add,commit,最后才能使用 "git push" 至远程分支.
    
    
    1: 修改未暂存(git diff 这个命令只检查我们的工作区和暂存区之间的差异)
    	使用 "git diff"  或者 直接在编辑器看修改部分
    2: 已暂存 未提交
    	使用 "git diff --cached" 能看到暂存区和本地仓库之间的差异
    3: 已提交 未推送
    	使用 "git diff  origin/" 能查看本地仓库与远程仓库的更改
    
    
    撤销修改
    1: 修改未暂存
    	在编辑器里修改了文件,但还没有执行 "git add . " , 
    	可以使用 "git checkout ." 进行回退
    2: 暂存未提交
    	已暂存, 未提交则使用 "git reset --hard" 进行恢复
    	"git reset --mixed"  用于将本地仓库文件撤回至工作区
    3: 已提交未推送
    	此时已经提交在 本地仓库了,但是未 push
        可以使用 "git reset --hard  origin/"进行恢复
    4: 已提交已推送
    	先恢复本地仓库,再强制push到远程仓库
    	4.1
    	 	"git reset --hard HEAD^ "
    			(git reset --hard HEAD^  回退版本信息,在Git中,
    			用HEAD表示当前版本,上一个版本就是HEAD^,
    			上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,
    			所以写成HEAD~100。)
    	4.2
    		"git push -f"
    			(git push -f表示将目前自己本机的代码库推送到远端,并覆盖)
        4.3
            还有一种笨办法,就是把上次修改的内容全部找到,并删除,重新提交一下,当然这样不好,因为不对的代码最好不要提交。
        注意:情况4,一定要保证别人在拉取的时候,你已经推到远端覆盖完成,否则别人会把你提交的错误代码拉取下来并提交,这样你再次提交的时候,就会重新把错误代码拉取到本地
    
    
    撤销git pull命令
    1、运行git reflog命令查看你的历史变更记录;
    2、然后用git reset --hard HEAD@{n}/id,(n是你要回退到的引用位置)回退/id是HEAD前面的参数;
    
    
    Git 中的 HEAD 可以理解为一个指针,我们可以在命令行中输入 cat .git/HEAD 查看当前 HEAD 指向哪儿,一般它指向当前工作目录所在分支的最新提交。
    当使用 git checkout  切换分支时,HEAD 会移动到指定分支。
    但是如果使用的是 git checkout ,即切换到指定的某一次命令,HEAD 就会处于 detached 状态(游离状态)。(退出游离状态:git checkout )
    HEAD 处于游离状态时,我们可以很方便地在历史版本之间互相切换,比如需要回到某次提交,直接 checkout 对应的 log id 或者 tag 名即可。
    它的弊端就是:在这个基础上的提交会新开一个匿名分支!也就是说我们的提交是无法可见保存的,一旦切到别的分支,游离状态以后的提交就不可追溯了。解决办法就是新建一个分支保存游离状态后的提交,然后合并临时分支的代码即可:https://blog.csdn.net/u011240877/article/details/76273335
    
    
    git reset中 有三个命令(--hard、--soft、 --mixed)
    git reset --soft xxx :  用于将文件提交至本地仓库后撤回暂存区的操作
    git reset --mixed xxx:  用于将本地仓库文件撤回至工作区
    git reset --hard xxx: 会将工作区、暂存区、本地仓库的所有提交的文件全都撤销
    注意 git reset --hard 会删除工作区文件;更改大的话慎用
    
    git reset --hard/soft  // 回滚到某一个提交的版本,
    git reset --hard/soft HEAD~ // 回滚num个提交
    git revert  -m number // 撤销某一次merge
    
    
    //git reset介绍:https://www.jianshu.com/p/c2ec5f06cf1a
  • 强制远端覆盖本地

    git fetch --all
    git reset --hard origin/
  • 提交日志查看方式

    git log -p 每一次提交具体差异
    git log —stat 显示文件修改差异,没显示具体修改
    git log —graph 树形状提交记录,可查看分支合并信息
  • git pull —rebase有冲突后,解决冲突,使用 git add .然后使用git rebase --continue

  • 切换到某个分支,将其他分支的某次提交应用到该分支

    git checkout 
    git cherry-pick 
  • 前者表示把到之间(左开右闭,不包含start-commit-id)的提交cherry-pick到当前分支;后者表示把到之间(闭区间,包含start-commit-id)的提交cherry-pick到当前分支。

    git cherry-pick ..
    git cherry-pick ^..
  • tag相关命令

    • 新建tag

      git tag  //轻量标签
      git tag -a  -m "tag_msg" // 附注标签
      git tag -a   // 给某次提交添加标签
    • 删除tag

      git tag -d 
    • 查看tag

      git tag // 查看所有tag
      git show  // 查看某条tag
      
      //------查看分支下对应的tag代码
      //首先切换到有tag的分支下,然后执行下面的命令
      git checkout -b   // 查看对应tag代码
    • 提交到远端

      git push origin  // 将某个tag提交到远端
      git push origin –tags // 将所有tag提交到远端
  • branch相关指令

git branch -d  // 删除某个分支
git branch -D  // 强制删除某个分支
git branch -avv // 查看本地分支与远端分支关系,并且显示分支最新一次提交信息
git remote show origin // 查看远端分支间关系
  • 查看当前分支与输入分支不同的地方:git diff 本地分支名(或不填或origin/远端分支名)

  • 删除缓存,忽略用户的数据文件:

//查看
*.xcuserdatad
//清除所有文件的缓存
git rm -r --cached .
//add、commit、push


UserInterfaceState.xcuserstate && xcschememanagement.plist文件有改动,忽略步骤:
1、打开终端,cd到你的项目文件夹下,然后输入以下命令。

git status

2、查看终端显示UserInterfaceState.xcuserstate && xcschememanagement.plist 文件有改动

3、执行以下命令就可删除忽略文件

git rm --cached XFStoreManage.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate

git commit -m "删除xcuserstate文件"

git push
  • ip变了,git远程仓库的地址也变了,这个时候就要自己手动修改项目连接到的远程仓库地址

输入命令:git remote set-url origin (新的git地址)
  • git fetch相关命令

git fetch
创建并更新本地远程分支。即创建并更新origin/xxx 分支,拉取代码到origin/xxx分支上;
在FETCH_HEAD中设定xxx、origin/xxx对应,需要合并时,git merge就可以将origin/xxx合并到xxx分支上;
git fetch命令通常用来查看其他人的进程,因为它取回的代码对你本地的开发代码没有影响;

git fetch <远程主机名>
将某个远程主机的更新,全部取回本地;
在不指定分支时通常默认为master;
比如:git fetch origin
将远程主机origin的master分支更新到本地;

git fetch <远程主机名> <分支名>
更新远程特定分支;指定远程分支和FETCH_HEAD,并且只拉取该分支的提交;
比如:git fetch origin abc
取回更新后,会返回一个FETCH_HEAD,指的是某个branch在服务器上的最新状态,我们可以在本地通过它查看刚取回的更新信息:
git log -p FETCH_HEAD
可以看到返回的信息包括更新的文件名,更新的作者和时间,以及更新的代码。我们可以通过这些信息来判断是否产生冲突,以确定是否将更新merge到当前分支。

具体操作步骤:
1、在本地新建一个temp分支,并将远程仓库的master分支下载到本地temp分支;
git fetch origin master:temp
2、比较当前本地分支代码与刚刚从远程下载下来的代码的不同;
git diff temp
3、合并temp分支到当前本地分支;
git merge temp
4、如果不想保留temp分支,删除;
git branch -d/-D temp

与git pull的不同点:
git fetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到当前本地分支中;
而git pull 则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决;
git pull 的过程:
1、从远程主机的master分支拉取最新内容;
git fetch origin master  
2、将拉取下来的最新内容合并到当前所在的分支中;
git merge FETCH_HEAD   
如果需要有选择的合并,git fetch是更好的选择。效果相同时,git pull将更为快捷;

  • git stash 暂存代码,命令操作

暂存功能解决的问题:
常常在操作一个功能时候,又需要改另外一个功能,或者说改个bug。
当前修改部分一时半会的是提交不了的。这个时候想要切换分支是不行的。
切换分支的前提是要么你提交,要么你恢复版本,这两个选择都是不被允许的,也是不合理的。
所以就有了暂存的功能。

具体操作 :

1. git stash:暂存

   git stash save xxx(给暂存加注释)

2. git stash list:查看暂存记录列表

3. 如果需要切换分支,此时就可以切换分支,暂存是可以跨分支取出的

4. git stash apply:应用某个存储,但不会把该存储从列表中删除

   git stash apply stash@{0} //表示应用第一个存储(num是数字,从0开始计数,表示存储的序号)

5. git stash pop:应用并删除某个存储

   git stash pop stash@{1} //表示应用并删除第二个存储(num是数字,从0开始计数,表示存储的序号)

6. git stash drop:删除某个存储。丢弃stash@{num}存储,从列表中删除这个存储

   git stash drop stash@{2} //表示从存储列表中删除第三个存储(num是数字,从0开始计数,表示存储的序号)

7. git stash clear:清空所有暂存的 stash

   git stash clear

注意:执行git stash 能正确存储的前提是文件必须在 git 版本控制中。比如:新增了个文件是不能被暂存的

举例:
1.git stash save "save XXXX" (将本地代码回滚至上次提交的时候)
2.git stash list (查看暂存的list)
3.git pull (将远程代码拉下来更新为最新的代码)
4.git stash pop (将第一步的回滚代码释放出来,相当于对本地代码和远程代码进行合并)
5.git add . (正常的添加,提交推送代码到远程)
6.git commit -m "注释"
7.git push 

  • 其他补充: 

1、//查看git上的commit次数
git rev-list HEAD --all --count

2、//用终端命令查看文件列表
ls -a
//删除ds文件
rm .DS_Store

3、git branch -a 查看远程分支,这个时候列表中显示了已经删除过的分支名称,为了删除这些已经删除了的分支,用git fetch -p

4、先git add . 
然后git commit -m ‘注释’
然后git pull
如果有冲突,修改冲突,然后再add,commit,push;如果没有直接git push

5、如果合并错误,并且没有执行git push,要返回之前的内容,先查看git log,找到最后一次push的commit之后的值,然后执行q返回,执行git reset --hard e58f11ce464b59ab514ffb4c8d5c1e3eb505dac4(这个是commit后面的值)

6、control + c 可以结束掉终端正在执行的内容

7、po task.response.URL.absoluteString  显示请求的完整接口

8、确保电脑,只连接了目标设备,确保打开了电视盒的adb开关
a.如果连接设备多余1个,执行 adb disconnect
连接电视/机顶盒:
1.电脑和设备必须在同一局域网
2.adb connect 目标设备ip
3.adb devices查看是否连接成功在同一个局域网下,然后安装adb install -r (apk的文件地址)

9、sudo vi /etc/hosts    可以修改内网和外网访问      wq!:强制退出

10、sudo spctl --master-disable    可以打开 设置---安全性和隐私 中的 任何来源 选项

11、显示隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true
关闭显示隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool false
按下这三个键option+command+esc,这时会弹出正在运行的软件进行重启的提示框,选中Finder后点击底部的重新开启按钮,重启Finder。

12、命令:“sudo du -sh * ”查看当前文件夹下各个文件和文件夹占用的空间大小,进而一步步找到占用磁盘空间较多的文件。


结束语

本篇粗略的介绍了Git的使用,但是对于Git内部的实现和一些具体的使用方法,还是需要自己去深入的了解。关于Git的详细介绍和工作原理,可以查看以下连篇文章。

Git教程,里面有介绍到Git的工作原理,可以仔细阅读。

Git Community Book 中文版介绍了Git具体使用,这本书也是关于Git的一本好书。

Git练习,实战练习Git的各种指令。

你可能感兴趣的:(iOS开发等常用知识点,git,终端,ios开发)