因为工作需要,在读雅各布.纳热布斯基的《Git高手之路》,本文记录第一章使用的操作。
第一章搭建Git环境和创建Git版本库(init clone)。文件添加、状态检查、创建注释和查看历史记录。与其他Git版本交互(pull、push)。解决合并冲突。创建分支列表、列表切换和合并。创建标签。
这一章模拟了两位开发人员,共同开发一个项目,使用GIT工具来管理项目。
一、创建Git版本库
本文使用带Web接口工具的网站(gitee)创建该版本库。
创建好仓库后,按照登录 - Gitee.com这个链接里面的操作,添加共同开发的用户。
这里使用VMware创建了两个虚拟机,分别模拟两个开发人员的操作。这两个开发人员分别是Bob和Alice.
操作一:Bob拉取代码,编码,提交代码
1、使用git clone命令从仓库拉取要开发的代码
2、文件夹内sudo vim random.cpp添加文件。
3、文件内编写了hello world程序
4、编译 g++ random.cpp -o random
5、运行 ./random 运行正常(输出hello world)
6、删除运行的程序sudo rm random
7、添加要提交的文件git add data
8、注释这次更改git commit -m "添加的注释部分"
9、提交代码 git push
注:git log 查看git的历史提交记录。
操作二:Alice拉取代码,编码,提交代码
1、使用git clone拉取代码
2、使用sudo vim random,在hello world输出上添加一行hello git
3、编译
4、运行
5、git status -s 查看代码更改状态,因为这里更改了random.cpp,所以random.cpp前面有M标志标识被更改。
6、git add random
7、git commit -m "添加hello git"
8、git push
操作三:Bob重命名、移动文件
目标:将random.cpp文件移动到文件夹src 中
1、sudo mkdir src
2、git mv random.cpp src/
3、git status -s 查看程序状态
4、git commit -a -m "将程序移动到文件夹中"
5、git push
ps:git commit -a 跳过 git add 步骤
普通的提交步骤是先使用git add 修改文件,然后使用git commit -m "注释内容"提交
使用git commit -a将自动完成上面的步骤,直接提交所有已跟踪文件的变更。这里的已跟踪文件指修改和删除的文件。如果是新添加的文件,将会被忽略。如果是新添加的文件,仍然需要手动git add添加。
操作四:Bob修改文件名称
目标:将src中的random.cpp文件重命名为rand.cpp
1、git mv src/random.cpp src/random
2、git status 查看文件状态
3、git commit -a -m "将random.cpp 重命名为 rand.cpp"
操作五:Bob更新版本库(合并)
背景:现在接着上面的操作四,需要使用git push了。但是Bob在push的时候发现error报错了。原来在Alice也在进行编码(这里Alice添加了一个readme.txt文件)
目标:拉取远程的代码到本地,git自动合并后再使用push提交到远程
1、git pull
2、git push
注:上面的操作中,1和2中间忽略了一步。因为合并代码后我们无法保证两个原本没问题的代码,合并后也没问题。所以在使用git pull拉取下来,自动合并之后。对合并后的代码进行测试。确保正常运行后再git push
操作六:Bob创建标签
在 Git 中,标签(Tag) 是一个指向特定提交(commit)的不可变引用,主要用于标记项目的重要节点(如版本发布。)
1、git tag -a -m "random v0.1" v0.1
2、git tag list 查看标签列表
3、git push origin tag v0.1 将本地标签v0.1推送到远程仓库
//上面完成了创建添加标签,然后Alice使用git pull 拉取仓库中更新的标签
操作七、解决合并冲突
问题背景:Bob和Alice同时修改了同一个文件,Bob先提交了,Alice再提交发现提交不上去(我认为提交前是需要先git pull, git pull 这里应该也是拉不下来。)这时候无法自动合并,所以需要手动合并冲突。
思路:提交之前先pull,发现会有冲突,这时候先将本地文件暂存,然后拉取,然后暂存取出来,然后查看状态,然后手动合并(这时候冲突文件里面会有标记,哪些代码有修改),然后git push。
1、git stash
2、git pull
3、git stash pop
4、git status
5、根据git status中出现的冲突文件,手动修改文件内容
6、git push
操作八、添加和移除文件
问题背景:使用git add 添加了多个文件,但是多个文件中有一些文件是不需要的,是需要删除的。这时候git add了,如何移除这个文件。
1、git add a add b
2、git status //查看暂存区状态
3、git rm b //移除b 这时候会报使用--cached保留本地文件,还是-f 强制删除
4、git rm -f b //因为本地不需要这个文件了,这里选择删除
5、git status //再次查看状态
6、git commit //添加注释
7、git push //推送代码
操作九、撤销对单个文件的修改
问题背景:有个文件在调试的时候被修改了(比如LOG日志),但是提交的时候需要取消这些修改。
上面这个问题在图形化git中直接还原就可以了。
命令行如下:
git status
git restore rand.cpp
git status
操作十、创建分支
创建新的分支在以下集中场景中会用到,开发新功能、修复缺陷、探索性工作、准备发布新版本、重构代码等。目的是为了隔离变更,保持主分支稳定。
构建新分支操作如下:
1、git switch -c new-branch-name
//创建一个新的分支,并切换到这个分支,git branch可以查看当前分支状态
2、在这个分支内编辑
3、git push提交代码
第二章:git操作练习(2)-CSDN博客