参考Pro Git,一些vsc不方便代替的有用命令备忘
提交
自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过git add
步骤,直接commit
git commit -a -m 'made a change'
gitignore
一个.gitignore
文件的例子:
# 忽略所有的 .a 文件
*.a
# 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
!lib.a
# 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
/TODO
# 忽略任何目录下名为 build 的文件夹
build/
# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf
删除
完全删除文件
# 删除log目录下所有log文件
git rm log/\*.log
不跟踪文件,但不删除文件
git rm --cached README
删除所有untracked的文件
git clean -fd
撤销
撤消并重新修改上一次的commit:
git add forgotten_file
git commit --amend
将文件移出暂存区
git reset HEAD CONTRIBUTING.md
还原文件到上次commit之后的状态(丢弃commit之后的修改)
git checkout -- CONTRIBUTING.md
log
显示最近的两次提交所引入的差异
git log -p -2
显示简短的差异信息
git log --stat
远程仓库
查看所有远程仓库<remote>
git remote -v
查看具体信息
git remote show <remote>
拉取远程仓库origin
中所有你还没有的数据
git fetch origin
如果已经设置了跟踪远程分支,则使用git pull
即可
推送到远程仓库<remote>
的<branch>
分支
git push <remote> <branch>
分支
分支就是一个在树上移动的指针,HEAD
指向当前所在的本地分支,checkout
操作即改变HEAD
指针
创建并切换到<newbranchname>
分支
git checkout -b <newbranchname>
删除分支
git branch -d hotfix
查看所有分支及其最后一次commit
git branch -v
三方合并时,可能会出现合并冲突
Git 会在有冲突的文件中加入标准的冲突解决标记,这样你可以打开这些包含冲突的文件然后手动解决冲突。 出现冲突的文件会包含一些特殊区段,如下是一个例子:
<<<<<<< HEAD:index.html
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
please contact us at support@github.com
</div>
>>>>>>> iss53:index.html
删除<<<<<<<
,=======
,和>>>>>>>
这些行,修改为想要保留的内容如下:
<div id="footer">
please contact us at email.support@github.com
</div>
然后暂存冲突的文件.一旦暂存原本有冲突的文件,Git
就会将它们标记为冲突已解决。
强制与远程同步
git fetch --all
git reset --hard origin/master
将feature
强制覆盖掉main
分支
# overwrite master with contents of feature branch (feature > master)
git checkout feature # source name
git merge -s ours master # target name
git checkout master # target name
git merge feature # source name
stash(贮藏)
git stash
类似一个临时的commit
,stash只会贮藏已修改和暂存的已跟踪文件。如果指定-u
选项,Git也会贮藏任何未跟踪文件。然而,在贮藏中包含未跟踪的文件仍然不会包含明确忽略的文件(.gitignore
)。 要额外包含忽略的文件,请使用--all
或-a
选项。
git stash
git stash -a
git stash list
git stash apply # 恢复最近的stash
git stash apply stash@{2} # 指定恢复stash@{2}
git stash drop # 删除stash
submodule
删除一个submodule
# Remove the submodule entry from .git/config
git submodule deinit -f path/to/submodule
# Remove the submodule directory from the superproject's .git/modules directory
rm -rf .git/modules/path/to/submodule
# Remove the entry in .gitmodules and remove the submodule directory located at path/to/submodule
git rm -f path/to/submodule
本文采用知识共享署名4.0国际许可协议(CC BY 4.0)进行许可