设置签名
项目级别/仓库级别 :仅在当前本地库范围内有效
git config user.name luoji_pro
git config user.email luoji_pro@foxmail.com
信息保存位置:./.git/config文件 可以用cat命令打开
系统用户级别:登录当前操作系统的用户范围
- 在上面的指令中加上 –global
- 信息保存位置: ~/.gitconfig 文件
git结构
- 工作区:写代码的地方。通过git add指令将新建/修改添加到暂存区。
- 暂存区:临时存储的地方。通过git commit指令将新建/修改提交到本地库。
- 本地库:存放历史版本的地方。
PS. 也可以直接将新建/修改从工作区提交到本地库,但这么做就不能再撤销了。
提交 命令
git status
- 查看工作区,暂存区的状态,如果没有任何可以提交的文件,就使用git add 命令提交文件到暂存区。
git add
- 将工作区的新建/修改添加到暂存区 ,如果后悔了,可以使用git rm –cached
命令,将file从暂存区移除。
git commit
- 提交命令,将暂存区的内容添加到本地库,直接使用则会出现:please enter the commit message for you changes.
- 这是让添加注释,此时git自动调用vim编辑器。按i键进入编辑模式。编辑完后,按ESC,然后:wq后按回车,退出vim编辑器。然后commit命令执行完成。
- 也可以直接使用git commit -m “在这里直接输入注释信息”
来直接输入注释,不需要再进入vim编辑器了。
版本控制 命令
git log
- 查看日志。 显示的内容非常详细。
- 直接使用时,多屏显示控制方式: 空格为向下翻页,b向上翻页,q退出。
- 可以使用git log –pretty=oneline指令,查看简洁的日志。显示出每次操作的哈希值和操作内容。
- 可以使用git log –oneline指令,和上一个指令相比,只显示部分的哈希值,更加简洁。
- 可以使用git reflog指令,和上一个指令相比,加入了一个指针数据,显示移动到相应操作所需移动的指针的次数。即: HEAD@{移动到当前版本需要的步数}
- 查看当前HEAD指针所在位置:git reset –hard HEAD
版本前进/后退
- 基于索引值操作[推荐]
- git reset –hard [索引值] 索引值就是每条记录的哈希值,可以是全部索引值,也可以是局部索引值。
- 使用^符号
- 只能后退,不能前进。
- git reset –hard^ 有几个^符号,就后退几个版本,向后退两个,就^^,向后退n个,就n个^。
- 使用~符号
- 只能后退,不能前进。
- git reset –hard HEAD~n 表示后退n步。
reset命令的三个参数对比
- –soft 参数
- 仅仅移动本地库HEAD指针
- – mixed 参数
- 在本地库移动HEAD指针
- 重置暂存区
- – hard 参数
- 在本地库移动HEAD指针
- 重置暂存区
- 重置工作区
比较文件 命令
使用 git diff
来进行比较。 - 将工作区中的文件和暂存区进行比较。
- 如果不带文件名,则比较所有文件。
使用 git diff [本地库中的历史版本] [文件名]
- 将工作区中的文件与本地库历史记录比较。
分支管理
- 什么是分支?
在版本控制过程中,使用多条线同时推进多个任务。最初有一条主干分支master,后续创建的分支从master分支复制出去。
- 分支的好处
- 可以同时推进多个功能的开发,提高开发效率。
- 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响,各分支相互独立,失败的分支删除掉重新开始就可以了。
分支管理 指令
- 查看已有分支
- git branch -v
- 创建分支
- git branch <分支名>
- 切换分支
- git checkout <分支名>
- 合并分支
- 第一步,切换到接受合并的分支上 git checkout <接受合并的分支名>;
- 第二步, 执行合并操作,使用 git merge <另一个分支名(即被合并的有新内容的分支名)> 指令 。
解决冲突
如果两个分支同时对同一个文件的同一个地方做了修改,此时如果再合并的话,系统不知道该舍弃哪一个,此时就会自动合并失败(Automatic merge failed).
- 冲突的表现:在文件内容里,出现两个分支的内容。
- 冲突的解决:
- 第一步,手动去编辑文件修改(如使用vim指令),并删除特殊符号;
- 第二步,改完后,保存退出;
- 第三步,git add
- 第四步,git commit -m “日志信息” 此时,commit后面不能带文件名。
远程库操作
新建别名 命令
与远程库交互时,需要知道远程库的地址,如https://gitee.com/wumeidewunv/test_push.git
但是,这个地址太长,不可能记住,所以可以用git remote指令将该地址重新命名。
该指令举例: git remote add origin https://gitee.com/wumeidewunv/test_push.git
- 该指令中: origin为自定义的地址别名,后面跟的是需要被重命名的地址。
- 用 git remote -v 查看别名与地址的对应关系。
远程推送
使用git pull [远程库别名] [分支名] 命令将本地库内容推送到远程库中。
- 如:git pull origin master origin为上一条指令(git remote add origin https://gitee.com/wumeidewunv/test_push.git执行后地址 https://gitee.com/wumeidewunv/test_push.git 的别名,master为分支名。
远程克隆
- git clone [远程库地址] 指令 如 git clone https://gitee.com/wumeidewunv/test_push.git
克隆有三个效果
- 完整地把远程库内容下载到本地
- 创建origin 远程地址别名
- 初始化本地库
远程拉取
- git pull 命令
- pull相当于是 fetch 和 merge操作的合并,即pull = fetch + merge。
- git fetch [远程库地址别名] [远程分支名] 将该远程库中该分支的内容拉取到本地。
- git merge [远程库地址别名/远程分支名] 将刚才fetch到本地的内容与本地的分支合并。
- 使用git pull 命令:git pull [远程库地址别名] [远程分支名] 直接一下子做了上面的两个操作。
- git pull 命令
解决冲突
冲突原因:如果两个人在各自本地对同一文件的同一位置都做出了各自的修改,并要将各自的修改提交到远程 库,此时,后提交的会与先提交的产生冲突。即如果不是基于远程库最新版所做的修改,则该修改不能够被推送到远程库,必须先从远程库拉取。拉取下来如果进入冲突状态,则按照“分支冲突解决”操作解决即可。
联机协作
用户协作
如果想让一个用户可以操作自己的远程库,可以进入自己的远程库后,通过settings→Manage access→invite a collaborator来邀请其他用户。被邀请人登录自己的账号后,在未读信息那里可以看到该邀请信息,然后点击进去并同意即可。
跨团队协作
如果两个远程库想要联结,用fork。一般是将别人的远程库fork到自己这里,然后clone下来,然后在本地修改后再推送到自己的远程库,然后再申请合并到原来的别人的远程库;主人同意合并后,就可以将修改合并过去了。步骤如下:
- 登录想要复制别人的库的人的账号;
- 利用该账号进入目标仓库,点击“fork”;
- fork完成后,将自己的库clone到本地,然后进行修改操作,然后再push到自己的远程库;
- Pull request:进入自己的那个本地库,点击 pull request→new pull request→create pull request,然后消息编辑界面,来编辑想给原主人说的话,编辑完成后,点击“create pull request”即可;
- 原主人登录账号,进入那个远程库,此时可以看到pull request 那里有信息,点击进去,可以看到刚才那条信息,点击进去看到详细修改。点击commits,可以看到本次的提交,点击 files changed,可以看到修改的地方,对代码进行审核,审核没问题,可以回到conversation,点击merge pull request进行代码的合并,点击后,可以编辑合并信息,完成后点击confirm merge,则完成了自己远程库的修改。之后将该远程库pull到本地,就完成了该次跨团队协作。
参考视频
本文档为这个视频的笔记。