git常用操作
这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天
学习资料
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 .
然后再提交。