把一个文件提交(commit)到了 Git 仓库,以后又想忽略它,可以这么做
- 在
.gitignore文件中添加要忽略的文件路径 - 从 Git 的跟踪列表中删除该文件
git rm --cached path/to/file 这个命令会从跟踪列表中删除文件,但不会删除工作目录中的实际文件。
- 提交
.gitignore和删除跟踪文件的更改
git add .gitignore
git commit -m "Untrack file"
现在 Git 就会忽略对这个文件之后的更改,不会再跟踪它了。
另外,如果想把已经跟踪的目录忽略,要递归删除跟踪:
git rm -r --cached some-directory
总结下流程:
- 添加要忽略的文件/目录到 .gitignore
- 用 git rm --cached 将已跟踪的文件/目录从暂存区删除
- 提交 .gitignore 及删除文件的更改
这就可以让 Git 忽略原来已经跟踪的文件了,不再对其修改进行版本控制。
初次开发需求前,要先拉取生产/预发分支,然后基于这个分支之上,创建自己的特性分支进行开发
- 拉取生产/预发分支
git fetch origin master:master
- 基于拉取的分支创建自己的分支
git checkout -b feature-branch origin/master
- 开发完成后,将代码提交到自己的分支
git add .
git commit -m "feat: 开发完成"
- 提交代码到远程仓库
git push origin feature-branch
- 提交代码到远程仓库后,就可以发起 Pull Request 了
合并代码到主分支
- 切换到主分支
git checkout master
- 拉取主分支的最新代码
git fetch origin master
``
3. 合并自己的分支到主分支
git merge origin/feature-branch
4. 合并完成后,可以删除自己的分支
git branch -d feature-branch ``
- 提交合并后的代码到远程仓库
git push origin master
删除远程分支
git push origin --delete feature-branch
删除本地分支
git branch -D feature-branch
代码合并错误,并且已经推送到远程分支,如何解决?
假设是在本地合并,本来要把特性分支合并到 uat 分支,结果不小心合到了 release 分支
首先切换到特性分支合并到的错误分支,比如是 release
git checkout release
然后查看最近的合并信息(按 q 退出查看)
git log --merges
找到合并的 commit id,比如是 1234567890
然后撤销合并
git revert 1234567890
撤销远程仓库的推送
git push origin release --force
cherry-pick 指令
- 作用:选择某些提交的变更并将其应用到当前分支
- 与 merge 的区别:如果你需要另一个分支的所有代码变动。那么就采用 merge;如果你只需要部分代码变动(某几个提交),那么就采用 cherry-pick
- 场景:有时候分支不一定是完全按照需求号来开发的,可能按照周期来进行开发,那当前版本内的分支上,可能就会包含着很多需求的提交,这时候,如果产品要求你只上某一个需求,但是其他的暂时还不能上,那就需要使用到 cherry pick 的操作,将该需求囊括的所有提交应用到对应环境分支上。「一定要注意梳理清楚被拆分需求是由多少 commit 组成的,不要有遗漏和多选。」
## 查看最近提交(按 q 退出查看)
git log
## 切换到要应用的分支(比如提测时)
git checkout test
## 将指定的提交应用于当前分支(commitHash 就是通过第一步查询到的),这会在当前分支产生一个新的提交
git cherry-pick <commitHash>
代码回滚
- 回滚到指定的 commit id
git reset --hard <commit id>
- 回滚到上一个 commit id
git reset --hard HEAD^
- 回滚到上上一个 commit id
git reset --hard HEAD^^
- 回滚到上 100 个 commit id
git reset --hard HEAD~100
查看本地分支与之相对应关系等信息
git remote show origin
删除远程仓库中删除的分支的引用。(用到)
git fetch --prune
或者 git fetch --all && git remote prune
删除或者说同步本地分支
git remote prune origin
可以使用 -n 选项来先模拟执行这个清理操作,查看将要删除哪些引用。 git remote prune origin -n