git
常用命令
命令名称 | 作用 |
---|---|
git config -global user.name 用户名 | 设置用户签名 |
git config -global user.email 邮箱 | 设置用户签名 |
git init | 初始化本地库 |
git status | 查看本地库状态 |
git add 文件名 | 添加到暂存区 |
git commit -m “日志信息” 文件名 | 提交到本地库 |
git push origin | 提交到远程库 |
git reflog | 查看历史记录 |
git reset --soft/hard 版本号 | 版本穿梭 |
前两个命令只使用一次,签名的作用是区别不同操作者身份,若不设置用户名和邮箱会报错,但邮箱可填虚拟邮箱(不会验证),若要查看name和email在C
盘下用户找到.gitconfig文件。(跟在github等平台上登录账号无关,只是windows客户端使用)
[user]
name = tracy
email = 407911147@qq.com
初始化本地库
git init 目录下会出现隐藏的文件夹(查看中设置是否可见)
命令行查看用ll -a可以查看目录下的包含隐含文件的文件
git fork
把代码添加到自己的空间,这样再执行clone后,提交代码都是提交在了自己空间中。
查看本地库状态 git status
linux下,光标停留在一句话的前面,yy是赋值,p是粘贴
cat+文件名 查看文件内容
- 查看到当前所在的分支
- 是否提交了
- 有无文件可提交,若是新增的文件,会显示未追踪,即只存在于本地工作区而未被git追踪;若只存在于暂存区还未被提交,显示这些改动可以被提交;文件被修改了也会提示有文件变化
添加暂存区git add
即上面说的,使文件被git追踪的过程。
可以选择某个范围进行添加,在源文件修改处查看文件(打开工作树),右键就可以选中范围进行暂存
暂存区的文件可以被删除(该删除不会删除本地工作区的文件)
git rm --cached+文件名
提交本地库git commit
提交并备注
日志信息主要写备注,如进行了哪些修改等
git commit -m “ ”
跳过暂存区add步骤,直接提交
git commit -a
针对代码提交错误或者message写的有问题,需要修改
注意:该操作会覆盖之前的提交记录
git commit --amend
场景:在没有push代码的情况下,直接执行amend,就像可以修改掉记录
已经push了代码但是发现commit有错误
追加:git commit --amend,把上两次的修改为一次提交
推代码时用git push origin -f
如果是代码提交错误,那就要将远程仓库的版本回退了
git reset --soft 版本号(版本号是老的版本号)
历史版本
git reflog 查看版本信息 (得到结果每一行最前面的就是版本号)
git log 查看版本详细信息,查看commit提交信息
版本穿梭 git reset
要用到上个查看历史版本的版本号,指针指向会变化
可以查看.git/refs/heads/分支名
文件,会发现该文件的内容发生变化,内容就是版本号。
底层就是移动指针head->master->某个版本
git reset --soft 版本号
只会将远程的版本回退。本地文件不动。(建议使用这条)如果只是回退上一个版本,指令可以这样写。git reset --soft HEAD^
。
git reset --hard 版本号
(git log查看的上一次的commit)这会删除本地修改文件,也就是本地和远程版本内容一致。
git revert和git reset区别
git reset是指针会往回走,指向前一个版本,后面的提交就不会保留
eg:想重新提交,撤回,回退git reset --soft HEAD^
,一个^代表回退一次
而git revert撤销某次操作,此次操作之前的commit都会被保留把要撤的撤销,提交一个新的版本
git分支操作
分支的底层也是指针
分支的好处:同时并行推进多个功能开发,提高开发效率。各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
分支的操作
命令名称 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -V | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定的分支合并到当前分支上 |
分支合并(正常合并)
要切换到主分支上,把别的分支合并进来
分支合并(冲突合并)
冲突产生的原因: 合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git 无法替我们决定使用哪一个。必须人为决定新代码内容。
(若一个文件是在另一个的基础上修改的,那么正常合并,若两个文件都有修改,如master把a改成b,分支把c改成d,就冲突了)
- 先把代码提交到本地仓库git add
- git commit -m “描述”
- 将远程代码拉下来,进行合并git pull --rebase origin 分支
- 可能会有代码冲突,提示报错修改后,git rebase --continue
- push
git rebase和git merge区别
合代码的时候都会先找到两次commit的祖先
rebase:在自己的提交上把把别人的提交的副本接过来,把别人的提交删除,然后push
merge:以自己为基准,把三个分支合并,形成一个新的commit
- 出merge结果能够体现出时间线,但是rebase会打乱时间线。
- 而rebase看起来简洁,但是merge看起来不太简洁。
- 最终结果是都把代码合起来了,所以具体怎么使用这两个命令看项目需要。
git团队协作机制
团队内协作
初写代码的人把本地库代码push到远程库
把团队内其他成员添加进来(settings–>Manage access–>invite……)
然后给其他成员发送邀请的链接,其他成员打开并选择同意
没有代码的人在远程库把代码clone到本地库,做修改后,push
初写代码的人要把代码更新,则是从远程库pull,该操作会把代码merge
团队间合作
A团队把本地库代码push到远程库
想要B团队的人帮忙修改代码,非自己的成员所以不加入团队,其无法下载代码
B团队通过fork指令复制代码到自己的远程库(新建了一个库放的是A的代码)
B把远程库的代码clone到本地,修改后,push到自己的远程库
对A发送pull request指令,即通知A改好了,可以拉取了。
A要审核,当审核通过,直接merge操作,即A的远程库的代码已是修改好了的
此时,A的成员都可以pull新代码了
远程库
创建远程库
打开git bash,把内容传到远程仓库git remote add origin “ssh”
创建远程仓库别名
git remote -v 查看当前所有远程地址别名
git remote add 别名 远程地址
推送本地库到远程库
git push 别名 分支名(本地库的分支)
拉取代码到本地库
git pull 别名 分支名
克隆到本地
git clone 远程地址
clone会做如下操作:
- 拉取代码
- 初始化本地仓库
- 创建别名(一般默认是origin)
团队内合作
主要是其他成员要被加入团队,其他操作都一样
团队间协作
给外援远程库地址,外援访问,然后fork,此时他也拥有了一模一样的远程库,但他没有本地库,所以如果他要在本地修改代码,要通过clone操作,改好之后。
pull request,点击new,然后创建一个。对面就可以收到pull request了
收到之后,可以在线查看代码,审核通过的话,点击merge pull request
SSH免密登录
用https的时候,每次push或者别的都需要登录一次
ssh-keygen -t rsa -C 邮箱(账户)
ssh-keygen生成ssh协议的命令-t: 使用 rsa加密协议-C描述(对哪个账户进行免密)
生成了.ssh文件夹(在用户文件夹下)即公钥、私钥
把公钥拿到,复制到账户的SSH keys处
注意
- 关于第一次创建了仓库,不要在里面处理readme.md文件,在文件夹用touch readme.md,然后git add readme.md
- 第一次push的时候git push -u aoe master