赞
踩
MAC上的git配置,配置用户名和用户邮箱,以后每次与Git的交互都会使用该信息。
- git config --global user.name "your_name"
- 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_rsa
、id_rsa.pub
,id_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 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 <local_branch_name>
以当前分支为蓝本新建本地分支并切换到新分支
git checkout -b <new_branch_name>
本地没有,然后拉取远端存在的分支,并建立联系
- # 一般<new_branch_name>会和<remote_branch_name>保持一致,方便知道本地代码对应远端的哪个代码
- git checkout -b <new_branch_name> origin/<remote_branch_name>
当前分支合并其他分支
git merge <other_local_branch_name>
当前分支合并某个分支(包含当前分支)的一个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 <local_branch_name> //创建新的本地分支
- git checkout <local_branch_name> //切换到新建的本地分支
- git push origin <local_branch_name>:<remote_branch_name> //以新建的本地分支为蓝本,创建新的远端分支
- //本地和远端建立联系
- git branch --set-upstream <local_branch_name> origin/<remote_branch_name>
- //或者
- git branch --set-upstream-to=origin/<remote_branch_name> <local_branch_name>
-
- //简写命令:这个远端分支的命名都和本地分支名一样
- git checkout -b <local_branch_name> //创建新的本地分支,并切换到新建的本地分支
- git push --set-upstream origin <local_branch_name> //以新建的本地分支为蓝本,创建新的远端分支,并建立联系
-
-
删除远端分支,其实就是推送了一个空的分支到远端覆盖了原来的远端分支
git push origin :<remote_branch_name>
本地没有,然后拉取远端存在的分支,并建立联系
- git checkout -b <local_branch_name> origin/<remote_branch_name>
- // 或者
- git branch —track <local_branch_name> origin/<remote_branch_name>
任意的一个本地分支和任意的一个远端分支都可以建立对应关系
git branch --set-upstream <local_branch_name> origin/<remote_branch_name>
添加远端库
- 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 <branch_name> origin/<branch_name>" 能查看本地仓库与远程仓库的更改
-
-
- 撤销修改
- 1: 修改未暂存
- 在编辑器里修改了文件,但还没有执行 "git add . " ,
- 可以使用 "git checkout ." 进行回退
- 2: 暂存未提交
- 已暂存, 未提交则使用 "git reset --hard" 进行恢复
- "git reset --mixed" 用于将本地仓库文件撤回至工作区
- 3: 已提交未推送
- 此时已经提交在 本地仓库了,但是未 push
- 可以使用 "git reset --hard origin/<branch_name>"进行恢复
- 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 <branch_name> 切换分支时,HEAD 会移动到指定分支。
- 但是如果使用的是 git checkout <log id>,即切换到指定的某一次命令,HEAD 就会处于 detached 状态(游离状态)。(退出游离状态:git checkout <branch_name>)
- 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 <commit_id> // 回滚到某一个提交的版本,
- git reset --hard/soft HEAD~<num> // 回滚num个提交
- git revert <merge_commit_id> -m number // 撤销某一次merge
-
-
- //git reset介绍:https://www.jianshu.com/p/c2ec5f06cf1a
强制远端覆盖本地
- git fetch --all
- git reset --hard origin/<remote_branch_name>
提交日志查看方式
- git log -p 每一次提交具体差异
- git log —stat 显示文件修改差异,没显示具体修改
- git log —graph 树形状提交记录,可查看分支合并信息
git pull —rebase
有冲突后,解决冲突,使用 git add .
然后使用git rebase --continue
切换到某个分支,将其他分支的某次提交应用到该分支
- git checkout <branch_name>
- git cherry-pick <commit id>
前者表示把到之间(左开右闭,不包含start-commit-id)的提交cherry-pick到当前分支;后者表示把到之间(闭区间,包含start-commit-id)的提交cherry-pick到当前分支。
- git cherry-pick <start-commit-id>..<end-commit-id>
- git cherry-pick <start-commit-id>^..<end-commit-id>
tag相关命令
新建tag
- git tag <tag_name> //轻量标签
- git tag -a <tag_name> -m "tag_msg" // 附注标签
- git tag -a <tag_name> <commint_id> // 给某次提交添加标签
删除tag
git tag -d <tag_name>
查看tag
- git tag // 查看所有tag
- git show <tag_name> // 查看某条tag
-
- //------查看分支下对应的tag代码
- //首先切换到有tag的分支下,然后执行下面的命令
- git checkout -b <new_branch_name> <tag_name> // 查看对应tag代码
提交到远端
- git push origin <tag_name> // 将某个tag提交到远端
- git push origin –tags // 将所有tag提交到远端
branch相关指令
- git branch -d <branch_name> // 删除某个分支
- git branch -D <branch_name> // 强制删除某个分支
- 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、执行以下命令就可删除忽略文件<xcschememanagement.plist文件操作同理>
-
- 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 * ”查看当前文件夹下各个文件和文件夹占用的空间大小,进而一步步找到占用磁盘空间较多的文件。
-
-
2024.1.17新增,git切换到某个提交的相关方法:
本篇粗略的介绍了Git的使用,但是对于Git内部的实现和一些具体的使用方法,还是需要自己去深入的了解。关于Git的详细介绍和工作原理,可以查看以下连篇文章。
Git教程,里面有介绍到Git的工作原理,可以仔细阅读。
Git Community Book 中文版介绍了Git具体使用,这本书也是关于Git的一本好书。
Git练习,实战练习Git的各种指令。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。