常用 Git 命令行操作

190 阅读5分钟

本文记录了一些常用 Git 命令行操作的具体使用方式

git clone

  • git clone REPOSITORY_URL 拉取仓库,并使用仓库名作为本地文件名

  • git clone REPOSITORY_URL FOLDER 拉取仓库,并使用 FOLDER 作为本地文件名

git fetch

  • git fetch origin 更新所有远程分支

  • git fetch origin BRACH 更新指定远程分支

git pull

  • git pull origin 相当于 fetch + merge 对应的上游分支

  • git pull origin BRACH 拉取指定分支到当前分支

  • git pull origin --rebase master 让本地分支重新基于远端的 master 分支

git push

  • git push origin 把分支推到远端对应的上游分支

  • git push origin BRANCH 把分支推到远端对应的分支

  • git push --set-upstream origin BRANCH 把分支推到远端对应的分支,并将其设为上游分支(一般第一次提交自己的开发分支需要用到)

  • git push -f origin 把分支强推到远端对应的上游分支(会覆盖远端分支,需要慎用)

  • git push origin -d BRANCH 删除远程分支

git branch

  • git branch 列出本地所有分支

  • git branch -a 列出本地和远程分支

  • git branch -m NEW_BRANCH 更新当前分支名

  • git branch -d BRANCH 删除已合并的分支

  • git branch -D BRANCH 强制删除分支(即使未合并)

git checkout

  • git checkout BRANCH 切到对应分支

  • git checkout -b NEW_BRANCH 创建新分支

  • git checkout -b NEW_BRANCH BRANCH 基于 BRANCH 创建新分支

  • git checkout SHA-1 切换到某个提交,也可以用 HEAD~N(N 为 1, 2, 3…)切到上 N 个提交

  • git checkout SHA-1 /PATH/TO/FILE 把文件还原到相应的提交版本

  • git checkout --theirs /PATH/TO/FILE 有冲突时使用对方的文件版本

  • git checkout --ours /PATH/TO/FILE 有冲突时使用自己的文件版本

  • git checkout - 切换到之前的分支,适合在两个分支频繁切换时使用

git add

  • git add . 把所有增加/修改/删除的文件标识为要提交

  • git add /PATH/TO/FILE 只把单一文件标识为要提交,当有其他不需要提交的文件被修改时可使用

git commit

  • git commitgit add 标识的文件进行提交

  • git commit -a 把修改/删除的文件进行提交(如果有新增的文件,需要使用 git add 添加)

  • git commit -am "MESSAGE" 把修改/删除的文件进行提交并指定注释(适用于临时或简单注释内容)

  • git commit --amend 更新上一次提交,可以加上 -a 或在之前运行 git add 追加更新文件

  • git commit --amend --reset-author 默认的更新提交是不改变作者的,如果需要改变可以明确配置

git cherry-pick

  • git cherry-pick SHA-1 把某个提交应用到当前分支

git status

  • git status 查看目前状态

git diff

  • git diff 当前所有修改到的,没被标识为要提交的文件的更新内容

  • git diff --cache 当前所有修改到的,并被标识为要提交的文件的更新内容

  • git diff /PATH/TO/FILE 指定文件的更新内容,同样可以用 --cache 区分

git log

  • git log 详细显示所有记录

  • git log -n 10 显示最近 10 条记录

  • git log --oneline 简要显示所有记录

  • git log --oneline master ^BRANCH | wc -l 可以计算 BRANCH 和 master 分支相差多少个提交

git stash

  • git stash 暂存修改/删除,或已标识为要 commit 的新增的文件

  • git stash -u 暂存修改/删除/新增的文件,即新增文件可以不用 git add

  • git stash pop 把暂存的文件重新放出来

git revert

  • git revert SHA-1 通过形成一个新提交取消某个提交

  • git revert SHA-1 -m 1 如果是合并节点,需要指定要取消提交对应的父节点; 例如合并是把 BRANCH_2 合并到 BRANCH_1,那么要在 BRANCH_1 取消这次合并,就应该指定 m 为 1(大多数情况都是这样)

git reset

  • git reset 取消对要 commit 的文件的标识(相当于 git add 的撤销)

  • git reset --hard 取消修改/删除或已标识为要 commit 的新增的文件的更新

  • git reset SHA-1 取消从 SHA-1 之后的所有提交,但是保留提交文件的更新; 如果只想取消上一次提交,SHA-1 可以设为 HEAD^

  • git reset --hard SHA-1 取消从 SHA-1 之后的所有提交,而且不保留提交文件的更新

git rebase

  • git rebase BRANCH 让当前分支重新基于 BRANCH

  • git rebase -i SHA-1 更新 SHA-1 以后的提交,可以 pick/pedit/edrop/dsquash/s 相应提交; 如果第一个提交使用 p,后面的提交使用 s,可以把多个提交合并成一个提交

git merge

  • git merge BRANCH 把 BRANCH 合并到当前分支,尽量不形成合并节点

  • git merge --no-ff BRANCH 把 BRANCH 合并到当前分支,并确保形成合并节点

  • git merge --squash BRANCH 把 BRANCH 和当前分支的变更作为标识为要提交的内容,需要运行 git commit 完成只有一个提交的合并

git update-index

  • git update-index --assume-unchanged /PATH/TO/FILE 当某个文件被临时修改,但不想提交,也不适合放到 .gitignore,可以用此命令让 git 不将其识别为已修改; 如果这个文件是新增的,就不能用这个命令了,不过可以把文件路径加到 .git/info/exclude

  • git update-index --no-assume-unchanged /PATH/TO/FILE 恢复以上文件的修改识别