当前位置:   article > 正文

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

mac git

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

  1. git config --global user.name "your_name"
  2. git config --global user.email "your_email@gmail.com"

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

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

git config core.ignorecase false

生成密钥

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

ssh-keygen -t rsa -C "your_email@youremail.com"

生成密钥后,在本地的/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指令,将远端代码拉取到本地

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

简洁图文说明

常用Git指令

  • 初始化配置

    1. git config —global user.name “XXX"
    2. 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表示不保存本地更改)

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

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

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

    1. # 一般<new_branch_name>会和<remote_branch_name>保持一致,方便知道本地代码对应远端的哪个代码
    2. git checkout -b <new_branch_name> origin/<remote_branch_name>
  • 当前分支合并其他分支

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

  1. 假设有 主支master 和 分支firstTree 两个代码仓库:
  2. 提交结果如下:
  3. 主支master:提交ID0---提交ID1---提交ID2---提交ID3---提交ID4
  4. 分支firstTree:提交ID5---提交ID6---提交ID7
  5. 主支master合并分支firstTree某一个commit
  6. 1、先切换到firstTree,然后查看firstTree的提交日志git log,记住想要合并的commit id,比如:提交ID6
  7. 2、再切换到master,然后执行:git cherry-pick 提交ID6
  8. 3、此时合并已完成
  9. 注意:
  10. 如果你cherry-pick的是别人分支的commit id,可能会遇到错误fatal: bad object ...,那是因为
  11. cherry-pick是本地特性,本地要有这个commit id才可以被git cherry-pick。如果没有这个commit id,
  12. 就会出现这个错误。所以一定要保证本地有想要合并的分支仓库,且分支仓库包含要合并的commit id,即保证
  13. 拉取到最新的分支代码(git pull)。
  14. 主支master合并分支firstTree多个连续的commits:(也可以通过多次执行cherry-pick实现,当然这个属于笨方法)
  15. 1、同上;
  16. 2、基于firstTree创建一个新的分支,并指明新分支的最后一个commit id:
  17. git checkout -b newBranch 提交ID6
  18. 3、rebase这个新分支的commit到master(--onto master)
  19. git rebase --onto master 提交ID5^
  20. (提交ID5^:从提交ID5开始)
  21. 4、此时master已经合并了 提交ID5到提交ID6 的内容;
  • 远端新建分支,其实就是将本地分支推送至远端,所以要先建本地分支,最后与远端建立联系

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

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

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

    git branch --set-upstream <local_branch_name> origin/<remote_branch_name>
  • 添加远端库

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

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

    1. git fetch --all
    2. git reset --hard origin/<remote_branch_name>
  • 提交日志查看方式

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

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

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

    1. git cherry-pick <start-commit-id>..<end-commit-id>
    2. git cherry-pick <start-commit-id>^..<end-commit-id>
  • tag相关命令

    • 新建tag

      1. git tag <tag_name> //轻量标签
      2. git tag -a <tag_name> -m "tag_msg" // 附注标签
      3. git tag -a <tag_name> <commint_id> // 给某次提交添加标签
    • 删除tag

      git tag -d <tag_name>
    • 查看tag

      1. git tag // 查看所有tag
      2. git show <tag_name> // 查看某条tag
      3. //------查看分支下对应的tag代码
      4. //首先切换到有tag的分支下,然后执行下面的命令
      5. git checkout -b <new_branch_name> <tag_name> // 查看对应tag代码
    • 提交到远端

      1. git push origin <tag_name> // 将某个tag提交到远端
      2. git push origin –tags // 将所有tag提交到远端
  • branch相关指令

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

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

  1. //查看
  2. *.xcuserdatad
  3. //清除所有文件的缓存
  4. git rm -r --cached .
  5. //addcommit、push
  6. UserInterfaceState.xcuserstate && xcschememanagement.plist文件有改动,忽略步骤:
  7. 1、打开终端,cd到你的项目文件夹下,然后输入以下命令。
  8. git status
  9. 2、查看终端显示UserInterfaceState.xcuserstate && xcschememanagement.plist 文件有改动
  10. 3、执行以下命令就可删除忽略文件<xcschememanagement.plist文件操作同理>
  11. git rm --cached XFStoreManage.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate
  12. git commit -m "删除xcuserstate文件"
  13. git push
  • ip变了,git远程仓库的地址也变了,这个时候就要自己手动修改项目连接到的远程仓库地址

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

  1. git fetch
  2. 创建并更新本地远程分支。即创建并更新origin/xxx 分支,拉取代码到origin/xxx分支上;
  3. 在FETCH_HEAD中设定xxx、origin/xxx对应,需要合并时,git merge就可以将origin/xxx合并到xxx分支上;
  4. git fetch命令通常用来查看其他人的进程,因为它取回的代码对你本地的开发代码没有影响;
  5. git fetch <远程主机名>
  6. 将某个远程主机的更新,全部取回本地;
  7. 在不指定分支时通常默认为master;
  8. 比如:git fetch origin
  9. 将远程主机origin的master分支更新到本地;
  10. git fetch <远程主机名> <分支名>
  11. 更新远程特定分支;指定远程分支和FETCH_HEAD,并且只拉取该分支的提交;
  12. 比如:git fetch origin abc
  13. 取回更新后,会返回一个FETCH_HEAD,指的是某个branch在服务器上的最新状态,我们可以在本地通过它查看刚取回的更新信息:
  14. git log -p FETCH_HEAD
  15. 可以看到返回的信息包括更新的文件名,更新的作者和时间,以及更新的代码。我们可以通过这些信息来判断是否产生冲突,以确定是否将更新merge到当前分支。
  16. 具体操作步骤:
  17. 1、在本地新建一个temp分支,并将远程仓库的master分支下载到本地temp分支;
  18. git fetch origin master:temp
  19. 2、比较当前本地分支代码与刚刚从远程下载下来的代码的不同;
  20. git diff temp
  21. 3、合并temp分支到当前本地分支;
  22. git merge temp
  23. 4、如果不想保留temp分支,删除;
  24. git branch -d/-D temp
  25. 与git pull的不同点:
  26. git fetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到当前本地分支中;
  27. 而git pull 则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决;
  28. git pull 的过程:
  29. 1、从远程主机的master分支拉取最新内容;
  30. git fetch origin master
  31. 2、将拉取下来的最新内容合并到当前所在的分支中;
  32. git merge FETCH_HEAD
  33. 如果需要有选择的合并,git fetch是更好的选择。效果相同时,git pull将更为快捷;
  • git stash 暂存代码,命令操作

  1. 暂存功能解决的问题:
  2. 常常在操作一个功能时候,又需要改另外一个功能,或者说改个bug。
  3. 当前修改部分一时半会的是提交不了的。这个时候想要切换分支是不行的。
  4. 切换分支的前提是要么你提交,要么你恢复版本,这两个选择都是不被允许的,也是不合理的。
  5. 所以就有了暂存的功能。
  6. 具体操作 :
  7. 1. git stash:暂存
  8. git stash save xxx(给暂存加注释)
  9. 2. git stash list:查看暂存记录列表
  10. 3. 如果需要切换分支,此时就可以切换分支,暂存是可以跨分支取出的
  11. 4. git stash apply:应用某个存储,但不会把该存储从列表中删除
  12. git stash apply stash@{0} //表示应用第一个存储(num是数字,从0开始计数,表示存储的序号)
  13. 5. git stash pop:应用并删除某个存储
  14. git stash pop stash@{1} //表示应用并删除第二个存储(num是数字,从0开始计数,表示存储的序号)
  15. 6. git stash drop:删除某个存储。丢弃stash@{num}存储,从列表中删除这个存储
  16. git stash drop stash@{2} //表示从存储列表中删除第三个存储(num是数字,从0开始计数,表示存储的序号)
  17. 7. git stash clear:清空所有暂存的 stash
  18. git stash clear
  19. 注意:执行git stash 能正确存储的前提是文件必须在 git 版本控制中。比如:新增了个文件是不能被暂存的
  20. 举例:
  21. 1.git stash save "save XXXX" (将本地代码回滚至上次提交的时候)
  22. 2.git stash list (查看暂存的list)
  23. 3.git pull (将远程代码拉下来更新为最新的代码)
  24. 4.git stash pop (将第一步的回滚代码释放出来,相当于对本地代码和远程代码进行合并)
  25. 5.git add . (正常的添加,提交推送代码到远程)
  26. 6.git commit -m "注释"
  27. 7.git push
  • 其他补充: 

  1. 1//查看git上的commit次数
  2. git rev-list HEAD --all --count
  3. 2//用终端命令查看文件列表
  4. ls -a
  5. //删除ds文件
  6. rm .DS_Store
  7. 3、git branch -a 查看远程分支,这个时候列表中显示了已经删除过的分支名称,为了删除这些已经删除了的分支,用git fetch -p
  8. 4、先git add .
  9. 然后git commit -m ‘注释’
  10. 然后git pull
  11. 如果有冲突,修改冲突,然后再addcommit,push;如果没有直接git push
  12. 5、如果合并错误,并且没有执行git push,要返回之前的内容,先查看git log,找到最后一次push的commit之后的值,然后执行q返回,执行git reset --hard e58f11ce464b59ab514ffb4c8d5c1e3eb505dac4(这个是commit后面的值)
  13. 6control + c 可以结束掉终端正在执行的内容
  14. 7、po task.response.URL.absoluteString 显示请求的完整接口
  15. 8、确保电脑,只连接了目标设备,确保打开了电视盒的adb开关
  16. a.如果连接设备多余1个,执行 adb disconnect
  17. 连接电视/机顶盒:
  18. 1.电脑和设备必须在同一局域网
  19. 2.adb connect 目标设备ip
  20. 3.adb devices查看是否连接成功在同一个局域网下,然后安装adb install -r (apk的文件地址)
  21. 9、sudo vi /etc/hosts 可以修改内网和外网访问 wq!:强制退出
  22. 10、sudo spctl --master-disable 可以打开 设置---安全性和隐私 中的 任何来源 选项
  23. 11、显示隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true
  24. 关闭显示隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool false
  25. 按下这三个键option+command+esc,这时会弹出正在运行的软件进行重启的提示框,选中Finder后点击底部的重新开启按钮,重启Finder。
  26. 12、命令:“sudo du -sh * ”查看当前文件夹下各个文件和文件夹占用的空间大小,进而一步步找到占用磁盘空间较多的文件。

2024.1.17新增,git切换到某个提交的相关方法:

 

结束语

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

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

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

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

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号