Git 笔记

.gitignore

指定 Git 忽略的文件。

当我们执行 git status 后,会列出未跟踪的文件。然而有的文件我们不希望提交到 Git,为此我们可以添加 .gitignore 文件,指定排除哪些文件。

例如,要排除 VisualStudio 编译后产生的二进制文件,以及其它无关文件,就可以使用 .gitignore。为此 GitHub 提供了很多 .gitignore 模板

.gitattributes

GitHub 会在你的项目上传后自动分析它是由何种语言编写,然后给出一个统计结果,如 C 40%, Java 55%, XML 5%.有时候我们希望进行干预,创建 .gitattributes 文件,加入

*.c linguist-language=C++

这样所有 .c 文件都会被识别为 C++。此外,还可以用 Git 属性让其知道哪些是二进制文件(以防 Git 没有识别出来),以及指示怎样处理这些文件。

.gitsubmodule

如果当前项目依赖其他Git项目,执行:

git submodule add https://github.com/example/test.git ./path/

该命令会创建一个 .submodule 文件。

为了递归地拉取仓库,执行:

git submodule update --init --recursive

自定义Git

DOS 行尾

在 Windows 和 Unix 切换时会出现行尾的问题。解决方案是在 Windows 执行:

git config --global core.autocrlf true

在 Linux 执行

git config --global core.autocrlf input

忽略权限

文件权限也是 Git 关心的一部分,可以关闭对文件权限变更的检查

git config core.filemode false

撤销修改

想让已经修改的某个文件回到上一次提交时的状态:

git checkout 文件名

取消暂存

git reset HEAD 文件名

修改最新commit的注释

git commit --amend

文件名区分大小写

git config core.ignorecase false

push 记住密码

git config --global user.name yourusername
git config --global user.email your@email.com
git config --global credential.helper store

Git 打包压缩文件

git archive --format=zip --output master.zip master

推送本地分支到远端

git push origin your_local_branch:your_remote_branch

多个上游仓库

假设你打算对一个知名的开源项目进行一些修改,并通过你的私有仓库托管。这时你需要在你的私有仓库(譬如 GitLab)中创建一个项目。接下来克隆远程仓库并推送到你的私有仓库:

git clone git@github.com:example/example.git
cd example
git remote add upstream git@your_domain.com:example/example.git
git push -u upstream master

我们希望在一个自己的分支上进行操作,并将其关联到你的私有仓库上:

git checkout -b work
git push --set-upstream upstream work

如果原始仓库存在更新,通过如下命令来拉取:

git remote update

打 tag

git tag -a v1.0 -m "first release"
git push origin v1.0

或者:git push --tags

删除远端tag

git tag -d tag-name
git push origin :refs/tags/tag-name

GIt stash

当你的开发进行到一半,但是代码还不想进行提交 ,然后需要同步去关联远端代码时使用:

git stash
git pull
git stash pop

Git Rebase

基于远程分支开发,然后远程分支更新了,为了提交到远程分支,传统做法是 commit,fetch origin,merge。这种方式的缺点是,之后如果 push 的话,上游的历史记录就会看到你的这次 merge。

另一种方法是先 stash,然后 fetch origingit rebase orgin 让你的当前分支重新基于最新的远程分支,然后 commit。也可以用 git pull --rebase,效果是一样的。

合并 commit

如果你切换到另外一个分支进行开发,在上面随意地 commit,之后你在将该分支合入一个主分支时,为了隐藏那些随意的中间 commit,应该使用 merge --squash 将诸多 commit 合并成一个。

另一种方法:

git reset 以前的某个commit
git add .
git commit

列出所有文件

git ls-files

清除所有未跟踪的文件

git clean -fd

合并其他分支的某一个提交

假设我们有个分支 v2.0,另外还有个开发版本的分支 v3.0,想增加一个 v3.0 中的功能到 v2.0 中,可以使用cherry-pick:

git checkout v2.0
git cherry-pick 38361a55

其中这个分支号位于位于v3.0分支中。 可以cherry-pick一个区间的commit:

git cherry-pick <start-commit-id>..<end-commit-id>

<start-commit-id><end-commit-id> 之间(左开右闭,不包含 start-commit-id)的提交cherry-pick到当前分支;

git cherry-pick <start-commit-id>^..<end-commit-id>

<start-commit-id><end-commit-id> 之间(闭区间,包含start-commit-id)的提交cherry-pick到当前分支。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值