git常用操作

这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天

学习资料

git 使用简易指南 (bootcss.com)

Git - Book (git-scm.com)

公司使用Gitlab管理项目实践指南

git思维导图-ProcessOn

pcottle/learnGitBranching

Learn Git Branching

Git常用命令

git四连

git add .                                将所有改动放进暂存区
git commit -m "描述"                     提交并附带概要信息
git pull                                 从远程仓库拉去代码
git push                                 推送代码到远程仓库(master分支)

其余常用命令

git log                                  查看日志
git log -p                               查看详细历史
git log --stat                           查看简要统计
git status                               查看工作区状态
git branch 名称                          创建分支
git checkout 名称                        切换分支
git checkout -b 名称                     创建并切换到新分支
git branch -d 名称                       删除该分支(不能删除当前所在的分支,不能删除没有合并到master上的分支)
git branch -D 名称                       删除该分支(可以删除没有合并到master上的分支)
git commit --amend                       对最新的一条commit进行修正
git reset --hard HEAD^                   丢弃最新提交(未提交的内容会被擦掉)
git reset --soft HEAD^                   丢弃最新提交(未提交的内容不会被擦掉)
git revert HEAD^                         回到某个commit
git rebase 目标基础点                     重新设置基础点
git merge 名称                           将分支合并到head指向的分支
git push origin localbranch              将代码推送到远程仓库的指定分支
git push -d origin branchName            删除远程分支
git stash                                暂存代码
git stash pop                            弹出暂存代码

创建新的项目

在Gitlab上创建项目

登录Gitlab账号,点击New Project按钮创建新的项目。填写项目名称、项目描述,选择项目访问权限。公司的项目一般选择Internal,意为需要登录才能访问项目,公司外部人员没有访问权限。填写完毕后点击Create Project。

将项目clone到本地,并初始化项目代码

git clone http://xxxxx.git
cd gitlab-usage-demo
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master

开发新的功能

创建新分支,并完成功能的开发

Git项目创建的时候,默认分支为master分支。在开发的过程中,尽量不要在主分支上直接进行开发,最好创建新的分支,在开发分支上创建新的功能,经过测试后合并入master分支。

创建新的分支

git branch dev   # 创建名为dev的分支
git checkout dev  # 将当前项目切换到该分支

按照项目需求编写项目代码,此处新建一个main.py 文件,添加helloworld代码

vim main.py

添加以下内容

print("Hello world!")

此时查看项目状态

$ git status
位于分支 dev
未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)

    main.py

提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

将修改的文件提交

git add .  # 将所有的修改添加
git commit -m "添加了hello world功能"

多次修改可以提交多次内容,直到当前功能开发完成并完成测试。

将当前功能合并到master分支

完成一个功能的开发并测试通过之后,相应的代码就可以合并到master分支当中了

git checkout master  # 切换到master分支
git merge dev  # 合并dev分支的代码

提交到远程仓库

git push origin master

此时,可以在gitlab上查看到我们的提交结果,如果dev分支已经合并,这是我们可以删除该分支

git branch -d dev

项目上线

使用tag标签对重要版本进行标记

当根据项目设计完成所有功能之后,项目就可以进行线上部署了。为了保留线上项目的历史版本,便于回滚到历史上任意一个上线版本,对于每次进行线上部署,需要使用tag进行管理。需要回滚到某个历史版本时,切换到对应的tag就可以了。tag不同于分支,而是相当于一个个里程碑,对每个重要的上线版本进行标记。

创建tag,-a指定标签名,-m是提交信息

git tag -a v1.0 -m "第一个上线版本"

查看某个tag的信息

git show v1.0

需要回滚时,就可以切换到这个tag

git checkout v1.0

将tag提交到远程仓库

git push origin v1.0

对历史版本进行bug修复

我们总是在master分支上开发合并新的功能,对于上线历史版本发现的bug我们需要进行修复,这显然不能再master分支上进行,因为线上版本总是滞后于master分支,我们最好是从我们标记的tag处创建新的分支,进行bug修复,修复完成上线后对修复完成的版本打上新的标签。这里我们在示例项目上进行演示。

此时我们查看项目的当前状态

# hanbing @ shuding1 in ~/MyProject/gitlab-usage-demo on git:master o [11:13:20] C:1
$ git branch       
* master

# hanbing @ shuding1 in ~/MyProject/gitlab-usage-demo on git:master o [11:13:43] 
$ git tag     
v1.0

我们当前有master分支,由于此版本已经上线,我们打上了v1.0标签,表示这是我们上线的第一个版本。由于新的需求,我们需要在master分支上开发2.0版本,为了演示我们在master分支上提交一些新的代码

echo "print("Hello world! My name is hanbing.")" >> main.py
git add main.py
git commit -m "添加了自我介绍的功能"
git push origin master

上线几天后,运维人员发现了v1.0版本的一些bug,提交给开发人员进行修复,此时我们可以从v1.0处创建一个分支,在此分支上进行bug修复。

git checkout v1.0  # 切换到v1.0
git branch fix_bug_v1.0  # 从v1.0处创建分支 
git checkout fix_bug_v1.0  # 切换到创建的分支

在新创建的fix_bug_v1.0处添加代码

echo "print("Fix a bug of v1.0.")" >> main.py
git add main.py
git commit -m "修复了v1.0的一个bug"

此时查看我们的main.py,应该有以下内容

print("Hello world!")
print("Fix a bug of v1.0.")

进行测试上线过后,我们可以在此打上一个新的标签,v1.1

git tag -a v1.1 -m "第一个上线版本(修复了一个bug)"
 git push origin v1.1
 git checkout master # 切换回master分支上

这样我们既可以及时修复bug又不影响新功能在master分支上的开发。

对历史版本的修改合并到master分支

此时我们已经及时修复了线上版本的bug,master分支上可能也会存在相同的bug,我们需要把刚才的修改合并到master中。此时我们可以在master分支上创建新的分支merge_bug_fix,将刚刚的bug修复代码合并,测试后再讲合并后的代码合并到master分支。

git branch merge_bug_fix  # 从v1.0处创建分支 
git checkout merge_bug_fix  # 切换到创建的分支

合并刚刚的bug修复的代码

git merge v1.1            
自动合并 main.py
冲突(内容):合并冲突于 main.py
自动合并失败,修正冲突然后提交修正的结果。

这里会提示合并失败,因为在master分支和v1.1第二行我们添加了不同的代码,这时,main.py文件中会显示冲突的位置,我们选择需要保留的代码。这里我们选择两者都保留

print("Hello world!")
<<<<<<< HEAD
print("Hello world! My name is hanbing.")
=======
print("Fix a bug of v1.0.")
>>>>>>> v1.1

修改过后,我们的main.py文件如下

print("Hello world!")
print("Hello world! My name is hanbing.")
print("Fix a bug of v1.0.")

我们将上面的修改提交

git add main.py
git commit -m "将v1版本的bug修复代码合并到了master"

两者合并之后, merge_bug_fix分支便成为了master和V1.1的共同上游分支,这是我们可以切换到master分支,将 merge_bug_fix分支的修改合并

$git checkout master

$git merge  merge_bug_fix   
更新 987e446..4499939
Fast-forward
 main.py | 1 +
 1 file changed, 1 insertion(+)

显示合并成功,至此,我们已将历史版本中需要保留的修改合并到了主分支上面。

.gitignore

为了能重新忽略那些已经被track的文件,例如停止tracking一个文件但是又不从仓库中删除它(用于删除单个缓存文件)。可以使用以下命令:

    git rm –cached filename

删除缓存目录:

     git rm -rf –cached foldername

如果你想忽略的文件或者文件夹比较多,无法一个一个的删除。
重置所有缓存,提交后刷新忽略文件

    git rm -r –cached .

这将会移除所有的缓存索引,然后运行再运行以下命令添加所有的文件:

    git add .

然后再提交。

posted @ 2023-01-30 23:53  TomiokapEace  阅读(50)  评论(0编辑  收藏  举报