目录
场景:
某个版本出了bug, 但是,现在在主分支上,正执行其它编码任务,
如果,在主进程上修改,则有新的代码,还没有测试,在这上面修改后发布的话, 可能会造成更大问题。
理想的操作是:在原来那版的提交代码上,进行修改,然后打个新包发布。
解决:
找到那一版本的提交 commit ID
以某个提交为蓝本,创建新的分支
以这个提交为蓝本,创建一个新的分支
git checkout 59d8e27d366e3b4bddf -b tmpBranch
运行后,创建新分支,并自动跳转到这个分支中
git branch -a 可以查看所有本地、远端 分支
可以发现,本地已经有了刚才创建的分支了

但这时候,远端还没有和这个分支对应的分支
所以需要对应下
git push -u origin tmpBranch

这时,再运行下git branch -a

就发现远端也创建对应好了,
查看本地分支 git branch
查看远程分支 git branch -r
查看本地和远程分支 git branch -a
在这个分支里,正常的git add -u git commit -m git push 就可以了
如果要调回主分支,继续现在的工作
只需 git checkout 主分支名 就可以了

git branch -d 会在删除前检查merge状态(其与上游分支或者与head)。
git branch -D 是git branch --delete --force的简写,它会直接删除。
首先切换到其它分支上
然后调用 git branch -D brancName

git push origin --delete [branch_name]

每次commit 后,顺便打个tag,方便以后快速定位
git tag tagName
git push --tag

和commit 创建分支方法一样
只是将 commit 用tagName 替换
git checkout 59d8e27d366e3b4bddf -b tmpBranch
git checkout tagName -b tmpBranch

再次遇到这样情况时,
首先,找到那个提交,然后为那个提交创建一个分支
在这个分支上 进行修改
因为我还有个自动打包的机子,我将自己的项目推到gitlab中, 自动打包的机子pull后,进行打包发布,所以还有其它工作要处理
如果已经有个分支,直接 git checkout branchName 就可
如果还没有分支, git checkout 59d8e27d366e3b4bddf -b tmpBranch 创建新分支

注意打包时,必须 手动切换打包的分支,确保分支正确
下面是打包的脚本
- REM 声明采用UTF-8编码
- chcp 65001
- if exist "dev.txt" (
- echo "确保先 git push 本地最新版本"
- pause
- git add -u
- git commit -m"auto rebuild"
- git push
- pause
- )
-
- git reset --hard
- git clean -xfd
- git pull
-
-
- python build.py -a rebuild
-
- pause
git reset --hard 将打包机子的修改都撤销,回退上 上次提交时状态
使用 git reset 撤消对暂存区域的最后移动。
如果您使用 –hard 作为该选项,您不仅可以擦除到上一个暂存区域的移动,还可以擦除提交。
如果您错误地提交,这使它成为一个非常有用的恢复命令。
reset只影响被track过的文件
clean 用来删除没有track过的文件
结合使用这两个命令能让你的工作目录完全回到一个指定的
git reset --hard
git clean -xfd
可以恢复到上次提交时状态
以下是,git clean 的参数含义
参数说明:
n :显示将要被删除的文件
d :删除未被添加到 git 路径中的文件(将 .gitignore 文件标记的文件全部删除)
f :强制运行
x :删除没有被 track 的文件
- $ git clean -n
- Would remove untracked_file
-f or --force
- $ git clean -f
- Removing untracked_file
- $ git clean -dn
- Would remove untracked_dir/
- $ git clean -df
- Removing untracked_dir/
-x force removal of ignored files
- git clean -fd
- 删除当前目录下没有被track过的文件和文件夹.
- git clean -xd
- 删除当前目录下所有没有track过的文件夹,包括.gitignore中的文件夹
- git clean -xfd
- 删除当前目录下没有被track过的文件和文件夹,包括.gitignore中的文件和文件
我的打包过程,执行的是python
在打包成功后,运行
git tag tagName
git push --tag
给本次提交设置一个tag,方便出问题时 进行定位
- resJson=json_load("jsonInfoRes.json")
- if resJson.get("result",1)==0:
- file_write(build_file, str(Build))
- file_write(os.path.join(BuildDir, 'rev.txt'), rev)
- os.system(f'git tag {Build}')
- os.system('git push --tag')
- else:
- print("Upload Failed")
参考资料:
git reset --hardで変更を取り消す方法 | TechAcademyマガジン
Git Clean | Atlassian Git Tutorial