文章

Git操作经验

用于记录 git 使用过程中的一些经验和基础操作

Git操作经验

变基 rebase

这种变基操作非常不建议在多人协作中使用,这样会直接影响到他人的历史,如果是自己的仓库可以这样随便操作。

修改 commit 记录并重新推送,保持提交记录始终为一条路径并且没有分出去 选择最近的两个 commit 进行更改

1
git rebase -i HEAD~2

git 会先后自动打开两份文件,第一份需要将需要被合并的 commit 前的 pick 修改为 squash,即压缩。

保存并退出文档后会打开第二份,选择需要保留的 commit 信息,剩下的删去即可,保存并推出。

最后要记得:

1
git push --force-with-lease

直接强制推送!不要先使用 git pull 这样会将两个不同的提交记录分为两个路,最后汇到当前历史。

.gitignore文件

gitignore 不会忽略已经处于跟踪状态中的文件,所以需要先断开跟踪。

1
2
# 断开跟config.json文件的跟踪
git rm --cached config.json 

然后添加需要忽略的文件即可。

变换分支

在多人协作时,通常会采用不同的分支来记录不同的功能,首先我们需要创建并移动到一个用于不同功能的分支 feature

1
git checkout -b feature

在这个不同的分支下,拉取合并等操作建议都添加上完整的路径(仓库+分支)而不是使用 -u 参数重新设置默认上游分支,比如需要从 main 分支中拉取当前状态到现在的分支

1
git pull origin main

在当前分支完成工作后同样进行 addcommit 操作后,

1
git push origin feature

合并使用 merge 命令,合并到 main 分支:

1
2
3
4
5
# 首先切换到需要合并到的分支
git checkout main

# 将被合并的分支合并进来
git merge feature 

上述操作都会将远程仓库的文件拉取到本地,并且在本地进行合并操作。 但是很多时候管理员可以不必将每个分支全部拉取到本地,而是只需要获得(抓取 fetch)分支在远程仓库的镜像快照后在目标分支进行 merge 即可。

分支合并

管理者可以通过 fetch抓取远程仓库的快照,相当于去看了远程仓库每个分支的当前信息(快照)而不用实际拉取到本地。

1
2
# 抓取远程仓库的全部分支快照
git fetch origin 

假设当前处于测试分支 test ,也是管理者负责管理的分支

1
2
3
4
5
6
# 确认处于需要统一合并的管理分支
git checkout test 

# 将之前抓取的feature快照对应的分支内容与当前分支合并
# 也就是直接从远程仓库获取分支内容而不再需要本地分支
git merge origin/feature

两种路径:

1
2
1、远程仓库feature (pull)--> 本地feature (merge)--> 合并到本地test
2、远程仓库feature快照 (fetch)-->(merge) 合并到本地test
本文由作者按照 CC BY 4.0 进行授权