初始化工程
新建一个工程,本地初始化,然后连接到远程仓库:
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 add 和 commit 同时执行
推送更新
建议推送更新之前先拉取远端更新且合并
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