Git使用技巧
- 1. git分支创建与使用
- 2. master分支创建错误,gitlab怎么删除master分支
- 3. 别人的git项目怎么上传到自己git上
- 4. 使用git提交中删除idea
- 5. git获取某个tag代码
- 6. git合并分支
- 7. git pull :因为文件冲突pull失败
- 8. git将某分支的某次提交合并到另一分支
- 9. 解决`git push`出现`Your account has been blocked`问题
- 10 提交到远程仓库怎么撤回
- 11. 分支互换
- 12. 基于某次提交创建一个分支
- 13. 解决 Git 更新本地冲突
- 14. git子模块
- 15. 基于某个tag创建一个分支
- 16. 添加tag
1. git分支创建与使用
- 创建分支
-
提交分支
- 随便修改一个代码,提交到远程
- 切换分支
- 相关命令操作
- 使用命令创建分支并上传到远程git,打开终端
git checkout -b dev
在本地创建分支dev
git push origin dev
将分支dev上传到远程git上- 更新git上新创建的分支
git fetch
git fetch <远程主机名> <分支名>
默认情况下,git fetch取回所有分支(branch)的更新。如果只想取回特定分支的更新,可以指定分支名。例如:
git fetch origin master
2. master分支创建错误,gitlab怎么删除master分支
1.为什么删除不了?
2. 修改protected属性
3. 修改default属性
4. 删除master分支后,新建一个master分支from dev
5. 将dev的default和protected属性转移到master上
3. 别人的git项目怎么上传到自己git上
- 删除.git文件夹再上传
- commit and push
- 如果报错
Invalid VCS root mapping The directory <Project> is registered as a Git root, but no Git repositories were found there. Configure
- 如果push rejected,去guns文件夹右键Git Bash Here,输入
git pull origin master --allow-unrelated-histories
- 重新push
4. 使用git提交中删除idea
先有项目,然后分享至git,没有添加gitignore,导致.idea文件同样上传。想删除.idea办法:
#你要先去删除远程的 .idea 目录。
#这种情况,你是在设计gitignore 之前就没考虑好的,现在的措施是:
#(这样会删掉你本地的,不过你重新打开一次项目就有会自动给你生成了)
rm -rf .idea
#提交所有变化
git add -A .
#提交并push
git commit -m "删除.idea文件"
git push
git pull
#pull 后再看看同步后,远程的删掉没有;如果本地有,再次重复下。
#干净后,取消跟踪
git rm -r --cached .idea
git push
5. git获取某个tag代码
16872@DESKTOP-LF85VK5 MINGW64 /d/javaProject/idea/guns (master)
#查看所有tag
$ git tag
ultimate-v1.0
v1.0
v2.0
v3.3
16872@DESKTOP-LF85VK5 MINGW64 /d/javaProject/idea/guns ((v3.2))
#获得tag代码
$ git checkout v3.3
warning: refname 'v3.3' is ambiguous.
Checking out files: 100% (1676/1676), done.
Previous HEAD position was 6ebd6ede 更新协议
Switched to branch 'v3.3'
6. git合并分支
dev分支修改了很多,现在想要把dev分支的代码合并到master分支,先在dev分支将所有代码提交到git上
16872@DESKTOP-LF85VK5 MINGW64 /d/javaProject/idea2/p-cont (dev)
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
16872@DESKTOP-LF85VK5 MINGW64 /d/javaProject/idea2/p-cont (master)
$ git merge dev
Updating c2523e4..29b94ec
Fast-forward
.gitignore | 3 +
p-cont-dubbo/p-cont-dubbo-api/pom.xml | 6 +-
.../cont/api/ContManOperationLogService.java | 13 +++
.../cont/form/ContManOperationLog.java | 81 +++++++++++++
.../service/ContManOperationLogServiceImpl.java | 28 +++++
.../src/main/resources/env/dev/dubbo.properties | 12 +-
.../src/main/resources/env/dev/mysql.properties | 36 +++---
.../resources/spring/applicationContext-db.xml | 130 +++++++++++++++++++++
.../resources/spring/applicationContext-dubbo.xml | 3 +-
.../com/chinaredstar/cont/config/ReloadConfig.java | 42 +++----
.../com/chinaredstar/cont/config/WebConfig.java | 4 +
.../cont/controller/testController.java | 29 +++++
.../com/chinaredstar/cont/log/WebLogAspect.java | 125 ++++++++++++++++++++
.../main/resources/env/dev/application.properties | 6 +-
.../src/main/resources/env/dev/dubbo.properties | 11 +-
.../resources/spring/applicationContext-bean.xml | 1 -
.../resources/spring/applicationContext-dubbo.xml | 2 +-
17 files changed, 480 insertions(+), 52 deletions(-)
create mode 100644 p-cont-dubbo/p-cont-dubbo-api/src/main/java/com/chinaredstar/cont/api/ContManOperationLogService.java
create mode 100644 p-cont-dubbo/p-cont-dubbo-api/src/main/java/com/chinaredstar/cont/form/ContManOperationLog.java
create mode 100644 p-cont-dubbo/p-cont-dubbo-service/src/main/java/com/chinaredstar/cont/service/ContManOperationLogServiceImpl.java
create mode 100644 p-cont-dubbo/p-cont-dubbo-service/src/main/resources/spring/applicationContext-db.xml
create mode 100644 p-cont-web/src/main/java/com/chinaredstar/cont/controller/testController.java
create mode 100644 p-cont-web/src/main/java/com/chinaredstar/cont/log/WebLogAspect.java
16872@DESKTOP-LF85VK5 MINGW64 /d/javaProject/idea2/p-cont (master)
$ git pull
Already up to date.
16872@DESKTOP-LF85VK5 MINGW64 /d/javaProject/idea2/p-cont (master)
$ git push origin master
Total 0 (delta 0), reused 0 (delta 0)
remote: wb000051@chinaredstar.com
remote: wb000051@chinaredstar.com
remote: wb000051@chinaredstar.com
remote: successfully
To code.corp.rs.com:yj-be/p-cont.git
c2523e4..29b94ec master -> master
7. git pull :因为文件冲突pull失败
如果想放弃本地的文件修改,可以使用git reset --hard FETCH_HEAD
FETCH_HEAD
表示上一次成功git pull之后形成的commit点。然后git pull.
8. git将某分支的某次提交合并到另一分支
代码开发的时候,有时需要把某分支(比如develop
分支)的某一次提交合并到另一分支(比如master
分支),这就需要用到git cherry-pick
命令。
- 首先,切换到
develop
分支,敲git log
命令,查找需要合并的commit
记录,比如commitID:7fcb3defff
-
然后,切换到
master
分支,使用git cherry-pick 7fcb3defff
命令,就把该条commit
记录合并到了master
分支,这只是在本地合并到了master
分支 -
最后,
git push
提交到master
远程(可以用命令也可以用工具的push
操作),至此,就把develop
分支的这条commit
所涉及的更改合并到了master
分支。
如果文件有冲突,
cherry-pick
会中断,
你解决冲突后,使用git add
添加冲突文件,使用git cherry-pick --continue
完成cherry-pick
操作。
或者使用git cherry-pick --abort
中断操作。
如果你
cherry-pick
的是别人分支的commit
,可能会遇到错误fatal: bad object ...
,那是因为git cherry-pick
是本地特性,本地要有这个commit
才可以被git cherry-pick
。如果没有这个commit id
,就会出现这个错误。
9. 解决git push
出现Your account has been blocked
问题
git push
报错
解决方案,重新设置下远程仓库地址,然后在push
git remote set-url origin 远程仓库地址
10 提交到远程仓库怎么撤回
当前分支的某次提交可能是误操作,已经Push到远程分支了,想要撤回
# 查询提交记录
git log
# 本地代码会回退到
git reset --hard <想回退到的最后一次提交>
# 强制提交
git push -f
也可以用idea
图形操作
然后强制提交,同时错的提交记录会删除
11. 分支互换
问题场景:dev
分支为新功能代码,但是这一次不上线,jenkins
部署开发环境以dev
分支自动触发,基于dev
分支新建一个dev-temp
分支暂时存储dev
分支的新代码,然后将dev
分支的内容重置成master
分支
- 切换到dev分支,将本地的 dev 分支重置成 master
git reset --hard master
- 然后推送替换的 dev 到远程仓库 dev 分支
git push origin dev --force
- 等到这个版本上线成功后,再将 dev-temp 分支合并到 dev 分支,开发上次未发布的新功能
12. 基于某次提交创建一个分支
commitId:e50b2d4ed2edaeac96a7ed76cf68d7776435b17b
创建tag
git tag v_2021-11-03 e50b2d4ed2edaeac96a7ed76cf68d7776435b17b
推送到远程仓库
git push origin v_2021-11-03
然后可以基于这个tag
创建新分支
13. 解决 Git 更新本地冲突
报错
commit your changes or stash them before you can merge
13.1 stash
git stash
git pull
git stash pop
13.2 直接完全覆盖本地修改
git reset --hard
git pull
14. git子模块
当前项目里面有一个demo
模块用于测试,可能有多个人测试,每个人测试的代码不一样,引入git
子模块添加一个新的项目,每个人是一个分支保存各自的demo
测试代码
将新项目tophant-cloud-starter
作为子项目放入starter
内
不用先创建
starter
文件夹
终端
git submodule add https://git.tophant.com/tophant-framework/tophant-cloud-starter.git starter
参考 https://cloud.tencent.com/developer/article/2136829
15. 基于某个tag创建一个分支
git checkout -b <branch_name> <tag_name>
其中,<branch_name>
是你想要创建的新分支的名称,<tag_name>
是你想要基于的tag的名称。
例如,如果你想要基于tag
v1.0
创建一个名为feature-branch
的新分支,命令将如下所示:
git checkout -b feature-branch v1.0
一般此时会有两个远程
push
默认是origin
,可能推不上去
修改为我们自己的远程origin-my
,然后push
16. 添加tag
创建轻量级标签
git tag 1.1.0
创建带注释的标签
git tag -a 1.1.0 -m "tag message"
查看已创建的标签
git tag
推送标签到远程仓库
git push origin 1.1.0
推送所有标签到远程仓库
git push origin --tags