git常用技巧

强制拉取master(覆盖本地):

1
git clone git@github.com:laravel/laravel.git --depth=1

只拉取最后一次的提交结果。

1
git clone git@github.com:laravel/laravel.git --depth=1

开发者私人信息保密方法

实际开发中(类似邮件功能)需要开发者私人密码的文件,可以采用以下方法进行隐私保护。请在命令行中使用。

1
2
3
4
5
// 假设文件无改动,作用于版本库中已存在的文件。
// 此方法将确保本地文件不提交,并且版本库中此文件的变更无法影响本地文件。
git update-index --assume-unchanged app/config/mail.php
// 取消并恢复为普通文件
git update-index --no-assume-unchanged app/config/mail.php

设置全局代理(来自网络)

1
git config --global https.proxy https://user:password@address:port

clone某个特定分支

1
2
3
4
5
mkdir $BRANCH 
cd $BRANCH
git init
git remote add -t $BRANCH -f origin $REMOTE_REPO
git checkout $BRANCH

比较某个文件和远程分支上的区别

1
git diff localbranch remotebranch filepath

在版本库所有版本中搜寻一条字符串

1
2
3
4
5
git rev-list --all | ( 
while read revision; do
git grep -F 'Your search string' $revision
done
)

向分支提交一个初始的空commit,保证完全复位

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1.创建一个新的空分支,例如:newroot

git checkout --orphan newroot
git rm --cached -r .
git clean -f -d
2.创建空的commit

git commit --allow-empty -m '[empty] initial commit'
3.重新发送分支的全部内容

git rebase --onto newroot --root master
4.删除临时分支newroot

git branch -d newroot
现在master就已经包含了一个空的root commit了。

如何修改一个特定的commit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
当你想在推送前重做你最后的commit时,可以使用修改命令(git commit --amend)。如果你想修改的不是最后一个commit呢?

这种情况下,你可以使用git rebase,例如,你想要修改bbc643cd commit,运行下面的命令:

$git rebase bbc643cd^ --interactive
在默认的编辑器中选择并修改你期望修改的,然后保存修改并输入:

$ git add
<
filepattern
>

现在你就可以使用

$git commit --amend
来修改commit,之后使用

$ git rebase --continue
返回之前最新的commit。