MB Story

MB Story | coder

0%

Git命令行使用记录

git pull 暴力覆盖本地文件

1
2
3
git fetch --all  
git reset --hard origin/master
git pull

Git界面工具菜单项对应的Git命令

  • Fetch…
    1
    git fetch -v --progress "origin"
  • Reset…
    1
    git reset --hard

自定义log输出格式

  • 显示提交信息,作者,提交时间:

    1
    git log --pretty=format:'-%Creset %s %C<bold blue><%an> %Cgreen <%ai>' --abbrev-commit
  • 显示提交信息,作者:

    1
    git log --pretty=format:'-%Creset %s %C<bold blue><%an>' --abbrev-commit
  • 筛选某个日期后的log:

    1
    git log --after=2017-05-26-22
  • 筛选某一秒后的log:

    1
    git log --after=2017-05-26-22-12-30-00

Git提交到多个远程仓库

http://blog.csdn.net/isea533/article/details/41382699

先再仓库A关联仓库B,再用push 加选项–all,将本地所有分支都推送到已关联的所有仓库。


git的用户配置

git的全局配置,存储于$HOME/.gitconfig 里,这里的配置影响当前用户的所有git repo。

1
2
1. $ git config --global user.name   
2. $ git config --global user.email handsomerocco@gmail.com

git的局部配置,存储于$HOME/.gitconfig 里,这里的配置影响当前用户的所有git repo。

1
2
3. $ git config user.name  “username” 
4. $ git config user.email handsomerocco@gmail.com

版本回退

  • 命令行方式操作

未push的回退 :

1
git reset

已push的回退 :

1
git revert
  • TortoiseGit界面操作
1
revert to this version : #回退到當前版本
1
revert to parent version : ???

打标签tag

查看当前已有标签:

1
git tag

创建一个标签:

1
git tag v1.7.8.0

创建一个标签:

1
git tag v1.7.8.0 -m "这是一个标签的message"

已上命令是在本地创建标签,然后我们需求将标签提交到远程仓库

提交(发布)一个标签:

1
git push origin v1.7.8.0

删除本地tag

1
git tag -d v1.7.8.0

用push, 删除远程tag

1
git push origin :refs/tags/v1.7.8.0

分支管理

创建一个分支:

1
git checkout -b 1.8.0.0

切换到指定分支:

1
git checkout 1.8.0.0

将本地创建的一个分支提交到远程仓库,作为远程仓库的一个分支:

1
git push origin 1.8.0.0:1.8.0.0

克隆仓库

1
git clone xxx.git

如何clone git 项目到一个非空目录

如果我们往一个非空的目录下 clone git 项目,就会提示错误信息:

1
fatal: destination path '.' already exists and is not an empty directory.

解决的办法是:

1
2
3
4
5
1. 进入非空目录,假设是 /workdir/proj1
2. git clone --no-checkout https://git.oschina.net/NextApp/platform.git tmp
3. mv tmp/.git . #将 tmp 目录下的 .git 目录移到当前目录
4. rmdir tmp
5. git reset --hard HEAD

然后就可以进行各种正常操作了。


git pull 失败,提示无法创建index.lock文件

UNABLE TO CREATE ‘…GIT/INDEX.LOCK’ FILE EXISTS

解决办法:

1
rm .git/index.lock

git操作提示Auto packing the repository for optimum performance. You may also run “git gc” manually.

问题:
在对git库执行一些操作命令时(比如git am ,git pull,git push等操作)的时候,会出现类似如下提示(我是在用git am打patch时出现的,其他情况也是一回事):

1
2
3
4
5
ronny@ronny:~/tmpgitrepol$ git am ~/03patch/kernel/0001-add-kernel-version.patch --keep-cr
Applying: add kernel version for compile
Auto packing the repository for optimum performance. You may also
run "git gc" manually. See "git help gc" for more information.
Counting objects: 84286, done.

而且git am 后不退出,必须要ctrl+c退出。(其实是git 在将松散对象打包,这个需要时间,没有执行完打包,所以没退出)
里面主要关心如下两句:

1
2
Auto packing the repository for optimum performance. You may also
run "git gc" manually. See "git help gc" for more information.

即表示:
自动包装最佳性能的存储库。
你也可以手动运行 ‘get gc’ 。查看更多信息请执行“git help gc”。

当有这个提示的时候,直接运行 ’ git gc ‘,就可以了。

原因:
Git 往磁盘保存对象时默认使用的格式叫松散对象 (loose object) 格式。Git 时不时地将这些对象打包至一个叫 packfile 的二进制文件以节省空间并提高效率。当仓库中有太多的松散对象则就会提示你运行 ’ git gc ‘。
解决办法:
我们可以运行 ’ find .git/objects -type f ’ 命令,查看一下 objects 目录里有多少对象,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
1. ronny@ronny:~/tmpgitrepol$ find .git/objects -type f  
2. .git/objects/e4/00a9bf597d6956e6cfc5a4ba57e0f8d78a3025
3. .git/objects/70/8d7c923cb5954bfe1944e7cf7d7de93298f42f
4. .git/objects/70/86ddbb3226ad236d3d806cd530006e07392048
5. .git/objects/bd/b9f69f1b169e6f364455636ef3fb9037f345c5
6. .git/objects/c4/49782586498f0669271dbb5b2ae92abae7b7cd
7. .git/objects/4a/4c07ddbe727381f1ee9aab6faa194827419f1b
8. .git/objects/17/df87cafd85c400b71c7e56ffc2eaa78d2a55d8
9. .git/objects/ad/f130fd58cd2a0831a47f17e7f14d7ed4d86f9c
10. .git/objects/97/9c677acf5eb4e45ebe299e8c4b947d899b01af
11. .git/objects/79/56a405a7bc6e412685a967b3e798445c31bb36
12. .git/objects/79/12f0ebebb70a675e6ffa57703ddb78bf99d221
13. .git/objects/4b/ee144e033edd74677a14c311b1eb32b6ef8d6d
14. .git/objects/4b/1c9b2ce657a6677143b3c08b05379c6b62af05
15. .git/objects/info/packs
16. .git/objects/da/3de9a5f2e2d43a9bd53f74368f7e3623d1c1f6
17. .git/objects/47/b15e4bb0313b9255252c6815bbeb6cf56f9f2c
18. .git/objects/72/3be48015613503f9c315781b6c7bc60de76c0b
19. ..........................
20. .git/objects/d6/6bc0f7bd27bf0fc0383792871854c497a01e3d
21. .git/objects/d6/9a6b3dcb61590a63ca464d69b3613be857936b
22. .git/objects/pack/pack-862a0b39f354a7fde317459d6dcb8162c865d172.pack
23. .git/objects/pack/pack-862a0b39f354a7fde317459d6dcb8162c865d172.idx
24. .git/objects/7f/d654bfdd3255e07154ff3ef8388e295d79e3b0
25. .git/objects/32/cef5fe936a99b2875942dbbefb93242df454fd
26. .git/objects/c3/0e9e1875925d71757ffda53b103f99c56d5bda
27. .git/objects/3f/87d962119364899e0ad111d869f4fb289bad3b
28. .git/objects/9c/d6bd685d29237f2b82425019dcc549781932a2
29. .git/objects/95/557cadc1df7bcc8657a842fbf35fb0566d84e9
30. .git/objects/ee/abfadeea2c0c6467e279d0c8907141e0a27d1c
31.
32. ..........................
33.
34. .git/objects/d7/f7edb7d654eccd6b7acd0d2e501793bf14e42f
35. .git/objects/bc/b69da6f5b1294e32deb97046a80dac8b473ddd
36. .git/objects/73/51b70ef6db6adc61da2c766eb13397b6506152
37. .git/objects/e2/4d68e5288cfbc200b863c16178f0c32ef5d672
38. .git/objects/cb/588c96be139adaaaafed4225b16452fc3b69b3
39. .git/objects/0b/babb1c4e28109bb3cf8e5b9ece5aaeec90d417
40. .git/objects/28/043911626d5f683938f47477e8680b7d654710
41. .git/objects/a6/5151506d5821f160bf03e19ec362ba1929a79a
42. .git/objects/b3/8f35933655073128e9b2a5ebdd6c72d8090811
43. .git/objects/98/1b94a3bf5ab22f868452d7a1eb5128278ae3d7

然后我们执行git gc试试

1
2
3
4
5
6
1. git gc  
2. Counting objects: 84389, done.
3. Delta compression using up to 8 threads.
4. Compressing objects: 100% (52015/52015), done.
5. Writing objects: 100% (84389/84389), done.
6. Total 84389 (delta 31577), reused 84317 (delta 31531)

然后在运行 ’ git gc ’ 命令后,再执行刚才的命令,看下 object 目录里面还剩下多少对象,如下:

1
2
3
4
5
1. ronny@ronny:~/tmpgitrepol$ find .git/objects -type f  
2.
3. .git/objects/info/packs
4. .git/objects/pack/pack-ad6385919cc8c0e4ba2ec4cf7c8e8119a337f625.idx
5. .git/objects/pack/pack-ad6385919cc8c0e4ba2ec4cf7c8e8119a337f625.pac

接下来再执行git 命令的时候就没有这种情况了,patch直接应用,且不再有上面的提示。

解决办法2:静静等待几分钟自动完成。哈哈哈哈哈哈哈哈哈哈….


合并来自其他分支的指定的n个commit

  • 功能:
    git cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作。
    选择将N个commit合并到当前本地分支。

  • 示例:
    当前本地分支dev,远程分支dev2,需要将dev2的某个commit合并过来。

首先,本地分支目录下,点击show logs,切换到查看dev2的logs。
然后,选中指定commit,右键选择cherry pick,再点continue,解决冲突,再点done。完成将dev2的commit提交到本地dev分支。
最后,本地测试一下,没有问题的话,直接push。就可以了。