Loading... ## 删除分支 在GitLab中删除分支,可以通过两种方式:使用Git命令行或者使用GitLab的Web界面。 使用Git命令行删除分支: ```bash # 首先确保你已经在本地删除了该分支 git branch -d <branch_name> # 然后将删除推送到远程仓库 git push origin --delete <branch_name> ``` 使用GitLab Web界面删除分支:登录到GitLab。导航到你的项目。点击“Repository”菜单下的“Branches”。找到你想要删除的分支,点击分支右侧的“Delete”按钮。确认删除操作。 ## Github中那些迷之缩写?LGTM? - PR: Pull Request. 拉取请求,给其他项目提交代码 - LGTM: Looks Good To Me. 朕知道了 代码已经过 review,可以合并 - SGTM: Sounds Good To Me. 和上面那句意思差不多,也是已经通过了 review 的意思 - WIP: Work In Progress. 传说中提 PR 的最佳实践是,如果你有个改动很大的PR,可以在写了一部分的情况下先提交,但是在标题里写上 WIP,以告诉项目维护者这个功能还未完成,方便维护者提前 review部分提交的代码。 - PTAL: Please Take A Look. 你来瞅瞅?用来提示别人来看一下 - TBR: To Be Reviewed. 提示维护者进行 review - TL;DR: Too Long; Didn’t Read. 太长懒得看。也有很多文档在做简略描述之前会写这么一句 - TBD: To Be Done(or Defined/Discussed/Decided/Determined). 根据语境不同意义有所区别,但一般都是还没搞定的意思 ## 团队协作中的分支管理 git 强制删除本地分支命令 在Git中,如果你想要强制删除一个本地分支,可以使用以下命令: ```bash git branch -D <branch-name> ``` 这里的 `<branch-name>` 是你想要删除的分支名称。 如果你正在尝试删除一个已经存在的对象,并且Git提示你该分支正在被跟踪,你可能需要使用 `-D` 选项,它是 `--[delete]` 的简写。这个命令会强制删除分支,即使它有未合并的更改。 请注意,这个操作是不可逆的,一旦执行了删除分支的命令,你将无法恢复被删除的分支。因此,在执行这个操作之前,请确保你已经备份了所有重要的数据。 ## Git如何回滚代码以及reset和revert之间的区别 ``` 使用git log命令,查看分支提交历史,确认需要回退的版本 使用git reset --hard commit_id命令,进行版本回退 使用git push origin命令,推送至远程分支 ``` 快捷命令: ``` 回退上个版本:git reset --hard HEAD^ ``` 【注:HEAD是指向当前版本的指针,HEAD^表示上个版本,HEAD^^表示上上个版本】 如果修改到的文件比较少,我们可以不通过命令回滚的方式,手动删除之前的修改,再进行提交。 ## reset还是revert? reset和revert都可以用来回滚代码。但他们是有区别的,准确来说,reset是用来"回退"版本,而revert是用来"还原"某次或者某几次提交。 举个例子,比如在master分支,有以下提交历史: ``` 42eae13 (HEAD -> master) 第四次修改 97ea0f9 第三次修改 e50b7c2 第二次修改 3a52650 第一次修改 ``` 可以看到,master最新版本为第四次修改。 如果发现,在第四次修改有错误,需要回滚到第三次修改,就可以用reset命令来回退。 执行 git reset --hard 97ea0f9,这个时候,git的提交历史变为: ``` 97ea0f9 (HEAD -> master) 第三次修改 e50b7c2 第二次修改 3a52650 第一次修改 ``` 可以看到master当前指向97ea0f9这个版本,我们回到了第三次修改。 使用reset命令,Git会把要回退版本之后提交的修改都删除掉。要从第四次修改回退到第一次修改,那么会删除第二、三、四次的修改。【注:这里并不是真正的物理删除】 那如果发现第三次修改有错误,想要恢复第三次修改,却要保留第四次修改呢? 这个时候就可以用revert命令: ``` git revert -n 97ea0f9 git commit -m "恢复第三次修改" ``` Git提交历史会变成: ```text 33b8b30 (HEAD -> master) Revert "恢复第三次修改" 42eae13 第四次修改 97ea0f9 第三次修改 e50b7c2 第二次修改 3a52650 第一次修改 ``` 实际上,Git把第三次修改从提交中剔除(还原)了,还保留了第四次修改,并且产生了新的commit_id。 在实际生产环境中,代码是基于master分支发布到线上的,会有多人进行提交。可能会碰到自己或团队其他成员开发的某个功能在上线之后有Bug,需要及时做代码回滚的操作。 在确认要回滚的版本之后,如果别人没有最新提交,那么就可以直接用reset命令进行版本回退,否则,就可以考虑使用revert命令进行还原修改,不能影响到别人的提交。 使用reset还是revert,需要考虑实际的适用场景,没有绝对化。 上面提的 *并不是真正的物理删除* ,是因为Git会把分支的每次修改记录都会保留下来,比如有某次的commit,某次的reset等。而使用git reflog show命令,可以查看完整的提交历史, 只要有commit_id,我们就能恢复任意版本的代码,在各版本之间来回穿梭。 以上,就是我对Git回滚代码的一些使用心得,个人观点,仅供参考。 ## 团队工作流程 当您需要完成一个特定版本的任务时,通常需要在本地创建一个branch(分支),而不是一个tag。分支可以用来在仓库的历史记录中创建一个新的分支,使您可以在其中完成特定版本的任务。这样,您可以在该分支上进行开发、测试和调试代码,并且保持该分支与主分支(通常是master分支)相互独立。 创建一个基于某个tag的分支,可以确保您的工作基于特定版本的代码,而不会影响到主分支以及其他的任务。在本地创建一个1.2.0分支,可以使用以下命令: ```bash git checkout -b 1.2.0 ``` 然后,您可以在该分支上完成您的任务,并在完成后将更改的代码合并回主分支或其他需要的分支。 请注意,tag通常用于标记特定版本的代码,但在完成任务时,通常会创建一个新的分支。 当您在本地编写完成v1.2.0版本的代码后,您可以将代码推送到远程仓库,并发起一个PR(Pull Request)。 首先,将本地的1.2.0分支推送到远程仓库: ```bash git push origin 1.2.0 ``` 然后在远程仓库上创建一个PR,将1.2.0分支与目标分支(通常是master)进行比较,并请求将更改合并到目标分支中去。您可以在远程仓库的界面上找到创建PR的选项,一般称为"New Pull Request"或者"Create Pull Request"。 在PR中,您可以提供有关您所做更改的详细信息,以及对应的issue或需求。这样其他开发人员或仓库维护者就可以对您的代码进行审查,并提供反馈和建议。 一旦PR被审核通过并合并到目标分支,您的代码就会成为仓库的一部分,并包含在v1.2.0版本中。 ## 通过修改代理端口的方式加快 Git 速度? 如果你在使用 Git 命令时感到速度很慢,可能是因为网络连接问题导致的。你可以尝试通过配置 Git 代理来加速 Git 命令的执行。 以下是如何通过修改代理端口的方式来加快 Git 命令的速度: ```bash # 打开 Git 全局配置文件 git config --global --edit # 在配置文件中添加以下内容,指定代理服务器的地址和端口号 # 如果你和我一样使用的是 clash代理,哪么推荐就是 127.0.0.1:7890 [http] proxy = http://<your-proxy-host>:<your-proxy-port> [https] proxy = https://<your-proxy-host>:<your-proxy-port> ``` 按住`esc`然后按`:`输入`wq`保存退出。现在,Git 命令应该会使用你指定的代理服务器来连接远程仓库,从而加快速度。如果你仍然遇到速度慢的问题,可以尝试使用其他代理服务器 ## 本地库关联到远程库 ```bash # git remote add origin repo # …or create a new repository on the command line echo "# httprouter-source-code-commentary-reading-notes-self" >> README.md git init git add README.md git commit -m "first commit" git branch -M main git remote add origin git@github.com:JIeJaitt/httprouter-source-code-commentary-reading-notes-self.git git push -u origin main # …or push an existing repository from the command line git remote add origin git@github.com:JIeJaitt/httprouter-source-code-commentary-reading-notes-self.git git branch -M main git push -u origin main ``` ## 当更新项目的时候发生冲突的时候如何解决? ```bash # 如下所示这是别人的上游仓库和自己的远端仓库 ➜ NotionNext git:(main) git remote -v origin git@github.com:JIeJaitt/NotionNext.git (fetch) origin git@github.com:JIeJaitt/NotionNext.git (push) upstream git@github.com:tangly1024/NotionNext.git (fetch) upstream git@github.com:tangly1024/NotionNext.git (push) # 首先,确保你当前在你的本地 main 分支上 git checkout main # 然后,从 upstream 抓取最新的代码 git fetch upstream # 将你的本地 main 分支与 upstream/main 分支合并 git merge upstream/main # 最后,将更新后的代码推送到你的远程仓库 origin git push origin main ``` 如果在合并 upstream/main 分支时出现冲突,你需要手动解决这些冲突。解决冲突的步骤如下: 1. 运行 git status 命令查看哪些文件有冲突。 2. 打开冲突文件,编辑文件以解决冲突。Git 会在冲突处添加类似以下内容的标记: ```bash <<<<<<< HEAD // 你的修改 ======= // upstream 的修改 >>>>>>> upstream/main ``` `<<<<<<< HEAD` 到 `=======` 之间是你的本地修改,`=======` 到 `>>>>>>> upstream/main` 之间是 `upstream/main` 分支上的修改。你需要手动决定要保留哪些修改,然后删除标记。 3. 保存文件并关闭编辑器。 4. 运行 `git add <file>` 命令将解决冲突后的文件标记为已解决。 5. 重复步骤 1-4 直到所有冲突都已解决。 6. 运行 `git commit` 命令提交解决冲突后的代码。 7. 最后,运行 `git push` 命令将本地的 `main` 分支推送到你的远程 `origin` 仓库。 ## GitHub规范化提交日志的工具推荐? 您可以使用以下工具来规范化提交日志:Commitizen、husky和Git hooks。这些工具可以帮助您规范团队项目的git提交信息,使开发日志一目了然。 Commitizen是一个用于编写符合标准的提交消息的工具,它可以帮助您遵循约定式提交规范(Conventional Commits)。husky是一个git hooks工具,它可以在提交代码之前运行脚本。Git hooks是一种在特定事件发生时自动运行脚本的机制。 如果您想强制验证提交信息,可以使用Git hooks来拦截提交信息,进行格式判断。这里使用commit-msg钩子,该钩子接收一个参数(存有当前提交信息的临时文件的路径)。如果该钩子脚本以非0退出,Git将放弃提交。 **如何使用Commitizen**?要使用Commitizen规范代码提交信息,您需要按照以下步骤进行操作: ```bash # 安装Commitizen。您可以使用以下命令在全局环境中安装Commitizen: npm install -g commitizen # 选择合适的提交规范。您可以使用以下命令来初始化您的项目以使用Commitizen: # 这将在您的项目中安装cz-conventional-changelog适配器, # 它是一个符合约定式提交规范(Conventional Commits)的适配器。 commitizen init cz-conventional-changelog --save-dev --save-exact # 使用Commitizen提交代码。 # 当您需要提交代码时,请使用以下命令代替git commit: # 这将启动Commitizen交互式命令行界面, # 以帮助您编写符合约定式提交规范的提交消息。 git cz ``` **常见问题有哪些**? 主要有三个常见问题: ```bash jiejaitt@huangyingjiedeMacBook-Air Gee % commitizen init cz-conventional-changelog --save --save-exact Could not resolve /Users/jiejaitt/GolandProjects/Gee/node_modules/cz-conventional-changelog. Cannot find module '/Users/jiejaitt/GolandProjects/Gee/node_modules/cz-conventional-changelog' Require stack: - /usr/local/lib/node_modules/commitizen/dist/commitizen/adapter.js - /usr/local/lib/node_modules/commitizen/dist/commitizen.js - /usr/local/lib/node_modules/commitizen/dist/cli/git-cz.js - /usr/local/lib/node_modules/commitizen/bin/git-cz.js - /usr/local/lib/node_modules/commitizen/bin/git-cz ``` 这段话的意思是,您似乎在解析模块 `/Users/jiejaitt/GolandProjects/Gee/node_modules/cz-conventional-changelog` 时遇到了问题。当模块未安装或模块路径不正确时,通常会出现此错误消息。您可以尝试通过在项目目录中运行以下命令来重新安装模块: ```bash npm install cz-conventional-changelog --save-dev ``` 如果重新安装模块后仍然遇到相同的错误消息,则可以检查模块路径是否正确。 ```bash jiejaitt@huangyingjiedeMacBook-Air Gee % commitizen init cz-conventional-changelog --save-dev --save-exact Attempting to initialize using the npm package cz-conventional-changelog Error: Error: A previous adapter is already configured. Use --force to override adapterConfig.path: ./node_modules/cz-conventional-changelog repoPath: /Users/jiejaitt/GolandProjects/Gee CLI_PATH: /usr/local/lib/node_modules/commitizen/ installAdapterCommand: npm install cz-conventional-changelog --save-dev adapterNpmName: cz-conventional-changelog ``` 这个错误通常是由于已经配置了先前的适配器而导致的。您可以尝试使用以下命令覆盖先前的适配器: ```bash commitizen init cz-conventional-changelog --force --save-dev --save-exact ``` 这将使用 `cz-conventional-changelog` 适配器重新初始化您的项目。 ```bash jiejaitt@huangyingjiedeMacBook-Air Gee % commitizen init cz-conventional-changelog --force --save-dev --save-exact Attempting to initialize using the npm package cz-conventional-changelog npm WARN using --force Recommended protections disabled. ``` 这个警告信息是在使用 `cz-conventional-changelog` 适配器初始化项目时使用了 `--force` 标志导致的。`--force` 标志会禁用一些推荐的保护措施,并在某些情况下可能会导致问题。但是,在某些情况下,必须使用此标志来覆盖先前的配置。 如果您在使用 `cz-conventional-changelog` 适配器时遇到任何问题,可以尝试删除适配器并在不使用 `--force` 标志的情况下重新初始化项目。您可以通过运行以下命令来执行此操作: ```bash npm uninstall cz-conventional-changelog --save-dev # 生成 package.json npm init --yes # 继续执行 commitizen init cz-conventional-changelog --save-dev --save-exact ``` 这将删除适配器并使用 `cz-conventional-changelog` 适配器重新初始化您的项目,而不使用 `--force` 标志。 **汉化Commitizen**?要汉化Commitizen,您可以按照以下步骤进行操作: * 步骤1:安装中文包。您可以使用以下命令在全局环境中安装中文包: ```bash npm install -g cz-conventional-changelog ``` * 步骤2:配置中文包。在您的项目根目录下创建一个名为`.cz-config.js`的文件,并将以下内容复制到该文件中: ```javascript module.exports = { "types": [ { "value": "feat", "name": "feat: 新增功能" }, { "value": "fix", "name": "fix: 修复问题" }, { "value": "docs", "name": "docs: 文档变更" }, { "value": "style", "name": "style: 代码格式(不影响功能,例如空格、分号等格式修正)" }, { "value": "refactor", "name": "refactor: 代码重构(不包括 bug 修复、功能新增)" }, { "value": "perf", "name": "perf: 性能优化" }, { "value": "test", "name": "test: 添加、修改测试用例" }, { "value": "build", "name": "build: 构建流程、外部依赖变更(如升级 npm 包、修改 webpack 配置等)" }, { "value": "ci", "name": "ci: 修改 CI 配置、脚本" }, { "value": "chore", "name": "chore: 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)" }, { "value": "revert", "name": "revert: 回滚 commit" } ], // 按照惯例,第一行是 subject,用于简短描述提交的更改内容 // 空一行分隔 body 和 footer // body 是对本次 commit 的详细描述,可以分成多行 // footer 主要是一些备注,比如填写不兼容变更和 issue 关闭等信息 // 更多详情请参考 https://github.com/conventional-changelog/commitlint/blob/master/docs/reference-rules.md // https://github.com/angular/angular/blob/master/CONTRIBUTING.md#-commit-message-guidelines // https://www.conventionalcommits.org/en/v1.0.0/ // https://juejin.cn/post/6844904193387640846 // https://juejin.cn/post/6844904193387640846#heading-0 // https://juejin.cn/post/6844904193387640846#heading-1 // https://juejin.cn/post/6844904193387640846#heading-2 // https://juejin.cn/post/6844904193387640846#heading-3 // https://juejin.cn/post/6844904193387640846#heading-4 // https://juejin.cn/post/6844904193387640846#heading-5 // https://juejin.cn/post/6844904193387640846#heading-6 // https://juejin.cn/post/6844904193387640846#heading-7 // https://juejin.cn/post/684 ``` 另外如果你使用jetbrains家的IDE,你可以选择直接使用插件Git Commit提交规范和IDEA插件Git Commit Template的使用,非常方便。 ## 同步上流库并且推送本地库到远端的快捷方式 ```bash # 更新本地到远端 sudo pnpm run build sudo cp -r dist/* docs sudo git add . sudo git commit -m "" sudo git push origin main # 从远端同步更新到本地 git fetch upstream main git merge upstream/main ``` 除了"git fetch"之外,还有"git pull"命令可以进行代码合并操作。 "git pull"实际上是"git fetch"和"git merge"两个命令的组合。执行"git pull"命令时,Git会先从远程仓库获取最新的代码(相当于"git fetch"),然后自动将最新的代码合并到当前分支中(相当于"git merge")。这样可以简化代码获取和合并的过程。 使用"git pull"命令可以实现获取最新代码和合并代码的操作,但请注意,在执行"git pull"之前,需要确保你的当前分支没有未提交的更改。如果有,可以先提交你的本地更改,或者使用"git stash"命令将更改保存起来,然后再执行"git pull"。 ## Github 发版相关问题 GitHub是不是必须要有tag才能有发行版? 是的,GitHub上的发行版(Release)通常需要附带一个tag。Tag是一个在仓库中标记特定版本的引用。每次发布一个新的发行版时,通常会在代码仓库中打上一个tag,以便用户可以方便地查找和下载特定版本的代码。这样可以确保代码的版本控制和发布的一致性。所以,为了创建一个发行版,您通常需要先创建一个tag。 ## 其他小技巧心得 把旧项目提交到git上,但是会有一些历史记录,这些历史记录中可能会有项目密码等敏感信息。如何删除这些历史记录,形成一个全新的仓库,并且保持代码不变呢? ```bash # 新建且切换分支 git checkout --orphan latest_branch # 添加全部文件进入缓冲区 git add -A # 提交全部改变 git commit -am "commit message" # 删除本地分支 git branch -D master # 修改本地分支的名称 git branch -m master # 推送分支到远端 git push -f origin master ``` 要将远程仓库的变更同步到本地仓库而不改变本地仓库的变更,需要执行以下步骤: ```bash # 确定当前本地仓库所在的分支 git branch # 确定远程仓库的名称 git remote -v # 拉取远程仓库的变更 # 将会将远程仓库的变更下载到本地仓库,但不会应用到当前分支上 git fetch <remote_name> # 将本地分支更新到远程分支的最新状态 # 将远程分支的变更合并到本地仓库的当前分支上 git merge <remote_name>/<remote_branch> # 如果合并过程中出现冲突,需要手动解决冲突 # 一旦解决完冲突,可以使用以下命令将解决后的变更提交到本地仓库 git add . git commit -m "Resolve conflicts" # 如果需要将本地分支的变更推送到远程仓库,可以使用以下命令 git push <remote_name> <local_branch> ``` 最后修改:2024 年 07 月 11 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏