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_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
以当前分支为蓝本新建本地分支并切换到新分支
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的各种指令。