遇见的一些常用 git 命令

Git command practice.

Views:  times Posted by Jiawei Bai on June 23, 2025

遇见的一些常用 git 命令

不知不觉进组已经快 2 个月了。虽然以前也在 github 上上传过代码并进行维护,但是很多时候都是只对当前仓库不断的 add commit push。

而在实际工作中也遇到了很多有意思的 git 使用场景,今天就在这里做一个分享吧!

情景一

“小白,这是我们的工作仓库,你把这个克隆到本地,记得用 PAT”

“好的,我研究下什么是 PAT”

# 一般来说 我们这样克隆仓库
git clone https://github.com/example/repo.git

# 但是如果用PAT,就要在组织或者仓库中生成token,并通过token来拉取以及推送代码

# 安全方式:使用个人访问令牌(PAT)克隆私有仓库
# 注意:不要在命令行中硬编码PAT,推荐使用凭据助手或环境变量
# 方式一:临时使用环境变量
export GITHUB_TOKEN=ghp_your_personal_access_token_here
git clone "https://${GITHUB_TOKEN}@github.com/example/private-repo.git"

# 方式二:通过Git凭据助手存储PAT(推荐)
git clone https://github.com/example/private-repo.git
# 首次输入用户名后,密码字段输入PAT,Git会自动存储

# 企业版GitHub或GitLab使用示例
git clone https://your_username:your_personal_access_token@gitlab.com/company/repo.git
git clone https://your_username:your_personal_access_token@github.example.com/org/repo.git

# 这个秘钥生成之后记得保存,看过一次就再也看不见了,除非重新生成
# 通过下面这个命令,我们可以看到当前仓库的远端地址
git remote -v

情景二

“小白,创建个新的特性分支,然后提交个 PR 我看看”

“好的,我先看看怎么创建新分支”

# 首先拉取仓库中的最新更新,防止有未更新到本地的代码
git checkout main
git pull origin main

# 查看是否落后于远端分支
git status

# 查看所有分支,看看你想创建的那个特性分支是不是已经存在
git branch -a

# 首先在当前仓库中,创建个新分支,注意命名规范
git checkout -b feature/new_branch

# 经过开发后,暂存改动的文件,-u是只暂存将经跟踪的文件
git add -u

# 提交改动
git commit -m "new feature developed"

# 最后就可以推送到远端然后生成pull request啦, -u是 --set-upstream 的缩写
git push -u origin feature/new_branch

情景三

“小白,(已经提交完了的时候)你别直接提交到这个分支,你新创建一个”

“好的老板,我马上撤销提交。。”

# 先把本地的代码保存到新的分支中去,这个操作会把当前分支上所有未保存的修改都带到新的分支里去
git checkout -b feature/new_branch

# 还是一样的,经过开发后,暂存改动的文件,-u是只暂存将经跟踪的文件
git add -u

# 提交改动
git commit -m "new feature developed"

# 最后就可以推送到远端然后生成pull request啦, -u是 --set-upstream 的缩写
git push -u origin feature/new_branch

# 然后,要对刚刚提交过的branch 进行退回
# 一般有两种方式,假如只是回退几个commit,那么可以用revert
git revert [提交哈希值1]

# 上面哈希值的commit 不要了!
git revert [提交哈希值2]
git revert [提交哈希值3]
...
git revert [提交哈希值10]

# 上面都不要了!
git push

# 然后你就会看见分支里的提交记录:提交了1,2,3,...9,10,不要的提交1,2,3,...9,10,太长了!


# 第二种:什么!!我刚提交的10个commit都不要了,都要挪到新分支上去???
# 那就首先通过下面的命令查看提交记录
git log

# 找到10个提交以前的那个commit的提交哈希值,这个哈希值后面的所有提交都不要了
git reset hard [提交哈希值0]

# 推回远端仓库进行同步
git push --force origin [分支名]

# 然后远端仓库会变成:最新提交是哈希值1(后面没有任何内容)。但是git会记录你 reset hard和push force过,所以最好确认过了再用,因为如果其中有别人的提交就会全部丢失。直接回滚到指定的节点。但会到很干净。建议备份到新分支后再操作。

情景四

“小白,把 A 分支里刚才的两个 commit,提交到 B 里去”

“好的,我看看有什么提交”

# 先查看A分支的提交
git checkout branch-A

# 创建个临时分支来进行提交,下面命令是根据本地a来创建了临时的cherry pick分支
git checkout -b temp/cherry-pick branch-A

# 拉取最新修改
git pull  origin branch-A

# 查看提交,用--oneline,查看更清晰
git log --oneline

# 找到两个指定的commit以及其哈希值
# 切换到B分支,并拉取最新的B内容
git checkout branch-B
git pull origin branch-B

# 提交刚才看到的第一个commit
git cherry-pick [提交哈希值1]

# 处理冲突。。,
# 如果有冲突,看看有什么冲突
git status

	# 选项一,处理后就要当做新的commit 来提交
	git commit -m "提交了第一个commit,并且处理了一些冲突"
	# 选项二,这个commit 不要了,跳过当前提交继续
	git cherry-pick --skip
	# 选项三,我也不知道怎么处理冲突,取消当前cherry-pick操作
	git cherry-pick --abort

# 提交刚才看到的第二个commit
git cherry-pick [提交哈希值2]

# 继续处理冲突。。没冲突,那就直接结束

# 推送
git push origin branch-B

情景五(很少发生,但是发生在了我头上)

“老板,我改名字了”

“什么,你改名字了?那把提交记录里的名字换成你的新名字吧”

# 先查看都有谁提交了什么commit
git log --pretty=format:"%h %an %ae"

# 改变最近n次的提交人的姓名和邮箱
git rebase -i HEAD~n

# 在弹出的编辑器中,将需要修改的提交前的pick改为edit
# 保存退出后,依次对每个标记为edit的提交执行:
git commit --amend --author="正确用户名 <正确邮箱@example.com>" --no-edit
git rebase --continue  # 处理下一个提交

# 所有提交修改完成后推送到远程
git push --force

情景六

vim 编辑器的一些常用命令

# 当进入vim编辑器时
a # 在光标后进入插入模式
i # 在光标处进入插入模式
A # 在行末进入插入模式
I # 在行首进入插入模式
esc # 退出编辑,返回命令模式
: # 从命令模式进入底行命令模式
	:wq # 保存并退出
	:q! # 强制退出,不保存
	:w  # 保存文件
	:w 新文件名 # 保存为新文件
	:x # 保存并退出,(等价于:wq)
	:q # 退出(只能在没修改文件时)

# 还有一些暂时用不上的命令
# 光标移动(命令模式)
# 文本编辑(命令模式)
# 搜索与替换