本文记录了一些常用 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 commit
把git 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/p
,edit/e
,drop/d
,squash/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
恢复以上文件的修改识别