简单记录下常用 git 命令

79 阅读3分钟

初始化工程

新建一个工程,本地初始化,然后连接到远程仓库:

 echo "# mragofficial-utils" >> README.md
 git init
 git add README.md
 git commit -m "first commit"
 git branch -M main
 git remote add origin https://github.com/xxx/xxx.git
 git push -u origin main

或者,本地已有一个工程,直接添加到远程仓库:

 git init
 git remote add origin https://github.com/xxx/xxx.git
 git branch -M main
 git push -u origin main

管理远端仓库

 git remote -v # 显示所有远程仓库
 git remote show <remote_name> # 显示指定远端仓库信息
 git remote rm <remote_name> # 删除指定远端仓库
 git remote rename <remote_name> <remote_new_name> # 远端仓库更名
 ​
 git remote add <remote_name> <remote_url> # 添加一个远端仓库
 git remote set-url <remote_name> <remote_url> # 更改已有的 remote 地址

拉取更新

拉取更新后还要手动通过 merge 或 rebase 将更新拉取到本地分支

 git fetch <remote> # 从指定远端仓库拉取所有分支更新
 git fetch <remote> <branch> # 拉取指定分支更新

不建议直接使用 git pull

提交更新

 git add . # 添加当前目录所有改动到暂存区,建议这一步使用 IDE 功能
 git commit -m '提交信息' # 提交暂存区更改到本地分支
 git commit --amend # 修改上一次提交的信息,前提是上一次提交没同步到远端,可以合并本地多次未提交的更改
 git commit -a # 相当于 git addcommit 同时执行

推送更新

建议推送更新之前先拉取远端更新且合并

 git push # 只有一个远端仓库且只有一个远端追踪分支时,推送当前分支到远端对应的分支
 git push <remote> # 只有一个远端追踪分支时,推送当前分支到指定远端对应的分支
 git push <remote> <local_branch>:<remote_branch>
 git push <remote> <branch> # 远程分支与本地分支同名的情况
 git push <origin> HEAD # 推送当前分支到远端的同名分支
 ​
 git push <remote> --delete <branch> # 删除远端仓库分支
 git push <remote> --force <branch> # 强制推送更新,覆盖远端

管理分支

 git branch # 查看本地分支
 git branch -r # 查看远程分支
 git branch -v # 查看分支,并显示最后一次提交信息
 git branch -a # 查看本地和远程所有分支
 git branch -a --no-merged # 查看所有未合并到当前分支的分支
 git branch -a --merged # 查看所有已经合并到当前分支的分支
 git branch -d <branch> # 删除指定本地分支,前提是该分支没有未提交的更改
 git branch -D <branch> # 强制删除本地分支,哪怕有未提交的更改
 git branch -M <branch> # 更名当前分支,并同步更新远端分支名
 git remote show branch # 查看远程仓库分支信息
 ​
 git branch --set-upstream-to=<remote/branch> <local_branch> # 关联本地分支与远程分支
 git checkout <branch> # 切换分支
 git checkout -b <branch> # 基于当前分支创建新本地分支
 git checkout -b <branch> <remote/branch> # 拉取远端分支到本地并切换过去

合并分支

远端分支名称写成 remote/branch 的形式

 ###
 git merge <branch> # 合并指定分支到当前分支
 git merge --no-ff <branch> # 合并分支,并添加一个分支用于记录本次 merge
 git merge --squash <branch> # 将目标分支的所有变动全部拉取到当前分支暂存区,然后可以直接新建一个 commit
 git merge --abort # 若合并时出现了冲突,该命令可以完全回滚合并操作,前提是当前分支已经提交所有更改;若合并时出现冲突,那么当前的 merge 操作未完成,该操作会进入 in-progress merge 状态
 git merge --continue # 解决了合并冲突后并将解决后的文件添加到暂存区后,可以继续之前的 in-progress merge 操作,完成合并
 ​
 ​
 ###
 git rebase <branch> # 将目标分支的更改应用到当前分支,相比于 merge 来说提交历史更加简单、线性;建议本地分支的远端更新采用 rebase,而不同分支的合并采用 merge
 git rebase --no-ff # 类似 merge
 git rebase --abort # 类似 merge
 git rebase --continue # 类似 merge