Kika's
Blog
图片简介 | CC BY 4.0 | 换一张

Git备忘

2023-12-07

参考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

gitignore模板合集

删除

完全删除文件

# 删除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