掘金 人工智能 07月01日 11:14
一文记录使用git过程中的坑点
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文详细介绍了Git的常用操作,包括修改远程URL、配置、分支管理、代码行数统计、rebase与merge的区别、revert与reset的区别、拉取未合入的PR、reflog的使用以及stash的应用,旨在帮助开发者更好地进行版本控制和代码管理,提高工作效率和团队协作能力。

🔗 **配置与远程仓库**: 通过`git config`设置用户信息,如用户名和邮箱。同时,演示了如何使用`git remote set-url`修改远程仓库的URL,以及配置多个远程仓库。

🌳 **分支管理**: 介绍了分支的创建、切换、合并、删除等基本操作,如`git checkout -b branch_name`创建并切换到新分支,`git merge branch_name`合并分支,以及`git branch -d branch_name`删除分支。还介绍了`git reflog`查看分支来源。

🔢 **代码统计**: 提供了统计代码行数的命令,如`git ls-files | xargs wc -l`统计项目所有文件行数,以及`git ls-files | xargs cat | wc -l`统计总代码行数。

🔄 **rebase vs merge, revert vs reset**: 详细对比了`git rebase`和`git merge`的区别,以及`git revert`和`git reset`的区别,帮助开发者理解它们的不同用途和风险。

📦 **其他实用技巧**: 介绍了拉取未合入的PR,使用`git reflog`找回丢失的提交和撤销操作,以及使用`git stash`暂存和恢复工作区修改的方法。还介绍了如何将多个提交合并为一个提交。

修改远程URL

git remote set-url origin https://github.com/xxxx/snap.git # 通过HTTP的方式git remote set-url origin git@github.com:iosmers/snap.git

git config

git config 用于获取并设置存储或者全局变量,这些变量可以控制git的各个操作
git config 分为两个级别

git config --global user.name "your name"git config --global user.email "you email"
git config user.name "your name"git config user.email "your email"

通过git config 还可以配置git的各种选项,比如文本编辑器、远程仓库地址、钩子等

#[core]部分:这里存储了与git 仓库的核心设置的相关配置[core]repositoryformatversion = 0filemode = truebare = falselogallrefupdates = truesymlinks = falseignorecase = true#[remote "origin"]部分:这里存储了与远程仓库别名"origin"相关的配置[remote "origin"]url = https://github.com/user/repo.gitfetch = +refs/heads/*:refs/remotes/origin/* #fetch表示从远程仓库拉取代码时需要获取的分支# 可以配置多个origin[remote "paddle_origin"]url = https://github.com/user/repo.gitfetch = +refs/heads/*:refs/remotes/origin/* #fetch表示从远程仓库拉取代码时需要获取的分支#[branch "main"]部分,这里存储了与分支"main"相关的配置[branch "main"]remote = originmerge = refs/heads/main

可以使用git config --list命令列出来git可以在该处找到的所有的设置

git branch 分支管理

# 新建分支并切换到该分支git checkout -b branch_name# 将当前分支合并指定分支到当前分支git merge branch_name# 删除分支git branch -d branch_name# 从本地删除远程分支git push origin --delete branch_namegit branch -dr remote/branch查看本地的分支以及关联的分支`git branch -vv`# 对当前分支进行改名git branch -m old_branch new_branch

查看分支来源

# 查看分支来源git reflog show branch_name

对远程分支的操作

#查看所有远程分支git branch -r# 查看远程分支及其关联的本地分支git remote show origin# 获取远程分支列表git ls-remote --heads origin

注意,每次都需要从develop分支创建别的分支,不要从还没合并的分支中切过去

git 统计代码行数

*//显示项目的所有文件列表及行数(已删除的文件显示为空),最后一行会显示项目代码的总行数*git ls-files | xargs wc -l//只统计项目代码的总行数git ls-files | xargs cat | wc -l// 只查看项目文件列表git ls-files

git rebase 和 git merge

git revert和git reset

git revert和git reset都是用于处理历史提交命令

git reset --hard commit #这个模式会彻底重置分支,将分支的HEAD移动到指定的提交,并且删除暂存区和工作目录的内容git reset --soft commit #这个模式将分支的HEAD移动到指定的提交,但是不会更改暂存区和工作目录的内容,之前的修改仍然保留在暂存区和工作目录之中git reset --mixed commit #
git revert commitid

拉取别人未合入的PR

# 添加远程链接git remote add remote_git_repository url# 拉取远程分支并关联到本地分支git fetch remote_git_repository remote_branch:local_branch# 合并代码到本地分支git merge local_branch

git reflog

git reflog用于记录本地仓库中HEAD(当前分支的顶端)的移动操作。一般用途:

1、历史记录,git reflog显示了head的变动历史,每次切换分支,创建新提交,重置分支的时候,head的指向都会改变,这些变化都会记录在git reflog中2、找回丢失的提交,如果你不小心删除了一个分支或者重置了提交,可以使用git reflog找到那些丢失的提交的引用。这是因为即使在删除分支后,git仍然保留了一段时间的操作记录3、撤销操作,通过查看git reflog,你可以看到之前head的位置,这允许你回退到之前的状态,比如撤销一次错误的rebase,merge或者其他操作比如:

使用 Git Reflog 找回更改

假设你正在工作于一个项目,并进行了一些更改。在提交这些更改之前,你不小心执行了 git reset --hard HEAD~1,这使得你回到了上一个提交,并丢失了当前的工作。

git refloga1b2c3d (HEAD -> master) HEAD@{0}: reset: moving to HEAD~1e4f5g6h HEAD@{1}: commit: Your recent commit message...# 找到之前要恢复到的提交,比如e4f5g6hgit reset --hard e4f5g6h

使用 Git Reflog 撤销合并

假设你正在你的 master 分支上工作,并决定合并一个名为 feature 的分支到 master。但合并后,你意识到这个合并是错误的,你想要撤销它。

git refloga1b2c3d (HEAD -> master) HEAD@{0}: merge feature: Merge made by the 'recursive' strategy.e4f5g6h HEAD@{1}: commit: A commit on master before merge...**撤销合并**git reset --hard e4f5g6h

git stash

git stash命令可以将暂存区和工作区的文件保存到git栈中,一般有两种使用场景

# 暂时保存没有提交的工作$ git stashSaved working directory and index state WIP on workbranch: 56cd5d4 Revert "update old files"HEAD is now at 56cd5d4 Revert "update old files"# 列出所有暂时保存的工作$ git stash liststash@{0}: WIP on workbranch: 56cd5d4 Revert "update old files"stash@{1}: WIP on project1: 1dd87ea commit "fix typos and grammar"# 恢复某个暂时保存的工作$ git stash apply stash@{1}

特别注意,使用git stash pop命令,栈里面的记录就没了。另外,pop或者apply命令如果与当前工作区的代码有冲突,需要手动调整。

将多个commit合并到一个commit

在git中,可以使用rebase命令来将多个commit合并成一个commit,这个构成称之为squashing。下面是操作过程
1、启动交互式rebase,这里的N是指想要合并的数量,比如想合并最近的三个提交,N=3,-i是指交互式的rebase

git rebase -i HEAD~N

2、选择要合并的提交,注意看下面的注释的意思,如果想合并提交,除了第一个提交以外,将其余的提交前面pick改为squash或者s,这告诉git将这些提交合并到前一个提交中,第一个通常泡池pick,因为它是其他提交合并的基础

重新排序提交(如果需要)4、退出保存,按wq退出,这个过程可能会出现冲突,解决即可5、编辑最终的提交信息,你可以决定保留哪些信息,或者编写一个新的提交信息6、强制推送更改

git push --force origin master

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Git 版本控制 代码管理 分支 rebase merge
相关文章