10 个迅速提升你 Git 水平的提示【转】

简介: 转自:http://www.oschina.net/translate/10-tips-git-next-level   最近我们推出了两个教程:熟悉Git的基本功能和让你在开发团队中熟练的使用Git . 我们所讨论的命令足够一个开发者在Git使用方面游刃有余。

转自:http://www.oschina.net/translate/10-tips-git-next-level

 

最近我们推出了两个教程:熟悉Git的基本功能让你在开发团队中熟练的使用Git . 我们所讨论的命令足够一个开发者在Git使用方面游刃有余。在这篇文章中,我们试图探索怎样有效的管理你的时间和充分的使用Git提供的功能。

注:本文中,一些命令包含了方括号中的部分内容(例如:git add -p [file_name]).在这些示例中,你将插入必要的数字、标示符等等,如果没有方括号。

漠天
漠天
翻译于 2年前

4人顶

 

 翻译的不错哦!

1. Git自动补全

假使你使用命令行工具运行Git命令,那么每次手动输入各种命令是一件很令人厌烦的事情。
为了解决这个问题,你可以启用Git的自动补全功能,完成这项工作仅需要几分钟。

为了得到这个脚本,在Unix系统下运行以下命令:

?
1
2
cd ~
curl https: / / raw.github.com / git / git / master / contrib / completion / git - completion.bash  - o ~ / .git - completion.bash

然后,添加下面几行到你的 ~/.bash_profile 文件中:

?
1
2
3
if  - f ~ / .git - completion.bash ]; then
     . ~ / .git - completion.bash
fi

尽管早些时候我们已经提到这个,但是强调的不够充分。如果你想使用git的全部功能特性,
你绝对应该切换到命令行界面!

quentingui
quentingui
翻译于 2年前

1人顶

 

 翻译的不错哦!

2. 在 Git 中忽略文件

你是不是很烦那些编译过的文件 (比如 .pyc) 出现在你的 Git 仓库中?或者说你已经受够了已经把它们都加进了 Git 仓库?好了,这有个办法可以让你告诉 Git 忽略掉那些特定的文件和文件夹。只需要创建一个名为 .gitignore 然后列出那些你不希望 Git 跟踪的文件和文件夹。你还可以添加例外,通过使用感叹号(!)。

?
1
2
3
4
5
* .pyc
* .exe
my_db_config /
 
!main.pyc
开源中国匿名会员
开源中国匿名会员
翻译于 2年前

0人顶

 

 翻译的不错哦!

其它翻译版本(1)

3. 是谁弄乱了我的代码?

当事情出错时,先去指责别人是人类的天性之一。如果你的产品服务器挂了,使用git blame命令可以很容易找出罪魁祸首。这个命令可以将文件中的每一行的作者、最新的变更提交和提交时间展示出来。

?
1
git blame [file_name]

git blame demonstration

在下面的截图中你可以看到命令是如何在更大的目录中搜寻。

git blame on the ATutor repository

0x0bject
0x0bject
翻译于 2年前

1人顶

 

 翻译的不错哦!

4. 查看仓库历史记录

上一节我们已经学习了如何使用 git log ,不过,这里还有三个你应该知道的选项。

  • --oneline- 压缩模式,在每个提交的旁边显示经过精简的提交哈希码和提交信息,以一行显示。

  • --graph- 图形模式,使用该选项会在输出的左边绘制一张基于文本格式的历史信息表示图。如果你查看的是单个分支的历史记录的话,该选项无效。

  • --all- 显示所有分支的历史记录

把这些选项组合起来之后,输出看起来会像这样:

Use of git log with all, graph and oneline

开源中国匿名会员
开源中国匿名会员
翻译于 2年前

2人顶

 

 翻译的不错哦!

5. 绝对不要丢失对Commit的跟踪

假设你不小心提交了些你不想要的东西,不得不做一次强制重置来恢复到之前的状态。然后,你意识到在这一过程中你丢失了其它一些信息并且想要把它们找回来,或者至少瞅一眼。这正是git reflog可以做到的。

一个简单的git log命令可以为你展示最后一次commit,以及它的父亲,还有它父亲的父亲等等。而git reflog则列出了head曾经指向过的一系列commit。要明白它们只存在于你本机中;而不是你的版本仓库的一部分,也不包含在push和merge操作中。

如果我运行git log命令,我可以看到一些commit,它们都是我仓库的一部分:

Project history

然而,一个git reflog命令则展示了一次commit (b1b0ee9–HEAD@{4}),它正是我刚才进行强制重置时弄丢的:

Git reflog

lwei
lwei
翻译于 2年前

1人顶

 

 翻译的不错哦!

6. 暂存文件的部分改动

一般情况下,创建一个基于特性的提交是比较好的做法,意思是每次提交都必须代表一个新特性的产生或者是一个bug的修复。如果你修复了两个bug,或是添加了多个新特性但是却没有提交这些变化会怎样呢?在这种情况下,你可以把这些变化放在一次提交中。但更好的方法是把文件暂存(Stage)然后分别提交。

例如你对一个文件进行了多次修改并且想把他们分别提交。这种情况下,你可以在 add 命令中加上 -p 参数

?
1
git add  - p [file_name]

我们来演示一下在 file_name 文件中添加了3行文字,但只想提交第一行和第三行。先看一下 git diff 显示的结果:

Changes in repo

然后再看看在 add 命令中添加 -p 参数是怎样的?

Running add with -p

看上去,Git 假定所有的改变都是针对同一件事情的,因此它把这些都放在了一个块里。你有如下几个选项:

  • 输入 y 来暂存该块

  • 输入 n 不暂存

  • 输入 e 手工编辑该块

  • 输入 d 退出或者转到下一个文件

  • 输入 s 来分割该块

在我们这个例子中,最终是希望分割成更小的部分,然后有选择的添加或者忽略其中一部分。

Adding all hunks

正如你所看到的,我们添加了第一行和第三行而忽略了第二行。之后你可以查看仓库状态之后并进行提交。

Repository after selectively adding a file

鉴客
鉴客
翻译于 2年前

1人顶

 

 翻译的不错哦!

7. 压缩多个Commit

当你提交代码进行代码审查时或者创建一次pull request (这在开源项目中经常发生),你的代码在被接受之前会被要求做一些变更。于是你进行了变更,并且直到下一次审查之前你没有再次被要求进行变更过。在你知道又要进行变更之前,你已经有了一些额外的commit。理想情况下,你可以用rebase命令把多个commit压缩成一个。

?
1
git rebase  - i HEAD~[number_of_commits]

如果你想要压缩最后两个commit,你需要运行下列命令。

?
1
git rebase  - i HEAD~ 2

运行该命令时,你会看到一个交互界面,列出了许多commit让你选择哪些需要进行压缩。理想情况下,你选择最后一次commit并把其它老commit都进行压缩。

Git squash interactive

然后会要求你为新的commit录入提交信息。这一过程本质上重写了你的commit历史。

Adding a commit message

lwei
lwei
翻译于 2年前

1人顶

 

 翻译的不错哦!

8. Stash未提交的更改

你正在修改某个bug或者某个特性,又突然被要求展示你的工作。而你现在所做的工作还不足以提交,这个阶段你还无法进行展示(不能回到更改之前)。在这种情况下, git stash可以帮助你。stash在本质上会取走所有的变更并存储它们为以备将来使用。stash你的变更,你只需简单地运行下面的命令-

?
1
git stash

 

希望检查stash列表,你可以运行下面的命令:

?
1
git stash  list

 

Stash list

如果你想要解除stash并且恢复未提交的变更,你可以进行apply stash:

?
1
git stash  apply

 

在屏幕截图中,你可以看到每个stash都有一个标识符,一个唯一的号码(尽管在这种情况下我们只有一个stash)。如果你只想留有余地进行apply stash,你应该给apply添加特定的标识符:

?
1
git stash  apply  stash@{ 2 }

 

After un-stashing changes

无若
无若
翻译于 2年前

0人顶

 

 翻译的不错哦!

9.检查丢失的提交

尽管 reflog 是唯一检查丢失提交的方式。但它不是适应用于大型的仓库。那就是 fsck(文件系统检测)命令登场的时候了。

?
1
git  fsck  --lost-found

 

Git fsck results

这里你可以看到丢掉的提交。你可以通过运行 git show [commit_hash] 查看提交之后的改变或者运行git merge [commit_hash] 来恢复到之前的提交。

git fsck 相对reflog是有优势的。比方说你删除一个远程的分支然后关闭仓库。 用fsck 你可以搜索和恢复已删除的远程分支。

 

颠落大帝
颠落大帝
翻译于 2年前

0人顶

 

 翻译的不错哦!

10. Cherry Pick

我把最优雅的Git命令留到了最后。cherry-pick命令是我目前为止最喜欢的git命令,既是因为它的字面意思,也因为它的功能。

简而言之,cherry-pick就是从不同的分支中捡出一个单独的commit,并把它和你当前的分支合并。如果你以并行方式在处理两个或以上分支,你可能会发现一个在全部分支中都有的bug。如果你在一个分支中解决了它,你可以使用cherry-pick命令把它commit到其它分支上去,而不会弄乱其他的文件或commit。

让我们来设想一个用得着它的场景。我现在有两个分支,并且我想cherry-pick b20fd14: Cleaned junk 这个commit到另一个上面去。

Before cherry pick

我切换到想被cherry-pick应用到的这个分支上去,然后运行了如下命令:

?
1
git cherry - pick [commit_hash]

 

After cherry pick

尽管我们这次完成了一次干净的cherry-pick,你也应该意识到这个命令可能会产生冲突。所以用它时请无比小心。

htfy96
htfy96
翻译于 2年前

0人顶

 

 翻译的不错哦!

总结

说着说着就到了文章的最后,我认为这些技巧会让你的 Git 水平提升到一个新的高度。Git 是最棒的,它几乎能实现你所能想到的事情。因此,要经常挑战自己的Git水平。最后你很有可能会学到新的东西。

【作者】 张昺华
【新浪微博】 张昺华--sky
【twitter】 @sky2030_
【facebook】 张昺华 zhangbinghua
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
目录
相关文章
|
开发工具 git Python
10 个迅速提升你 Git 水平的提示(转)
最近我们推出了两个教程:熟悉Git的基本功能和 让你在开发团队中熟练的使用Git . 我们所讨论的命令足够一个开发者在Git使用方面游刃有余。在这篇文章中,我们试图探索怎样有效的管理你的时间和充分的使用Git提供的功能。
1075 0
|
4月前
|
存储 开发工具 git
|
23天前
|
缓存 Java Shell
[Git]入门及其常用命令
本文介绍了 Git 的基本概念和常用命令,包括配置、分支管理、日志查看、版本回退等。特别讲解了如何部分拉取代码、暂存代码、删除日志等特殊需求的操作。通过实例和图解,帮助读者更好地理解和使用 Git。文章强调了 Git 的细节和注意事项,适合初学者和有一定基础的开发者参考。
42 1
[Git]入门及其常用命令
|
4月前
|
开发工具 git
【GIT 第二篇章】GIT常用命令
Git常用命令涵盖初始化、状态管理、提交、分支处理、远程操作等关键流程。`git init`启动本地仓库,`git clone`下载远程仓库。通过`git status`和`git diff`检查工作状态与差异。利用`git add`暂存文件,`git commit`保存更改。借助`git branch`、`git checkout`、`git merge`和`git rebase`管理分支。使用`git fetch`、`git pull`和`git push`同步远程仓库。通过`git reset`、`git revert`和`git checkout`实现版本回退。
71 0
|
2月前
|
开发工具 git
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
这篇文章是关于Git常用命令的总结,包括初始化配置、基本提交、分支操作、合并、压缩历史、推送和拉取远程仓库等操作的详细说明。
117 1
git学习四:常用命令总结,包括创建基本命令,分支操作,合并命令,压缩命令,回溯历史命令,拉取命令
|
27天前
|
开发工具 git 开发者
|
27天前
|
开发工具 git 开发者
提升Git效率:掌握这5个高级命令
【10月更文挑战第17天】
44 0
|
3月前
|
存储 Linux 开发工具
掌握 Git 命令:每个开发者的必备技能
无论团队项目还是个人开发,掌握 Git 命令都是必备技能。本文介绍 Git 的基本概念与命令,如初始化仓库 (`git init`)、添加文件 (`git add`)、提交更改 (`git commit`)、检出分支 (`git checkout`)、合并分支 (`git merge`) 等,还分享了高级技巧如查看差异 (`git diff`)、撤销提交 (`git revert`)、修复合并冲突 (`git mergetool`) 和使用别名简化命令 (`git config --global alias.ci commit`)。
|
3月前
|
机器学习/深度学习 Shell 开发工具
Python使用管道执行git命令报错|4-7
Python使用管道执行git命令报错|4-7
|
3月前
|
存储 Linux 开发工具
Git基础命令,分支,标签的使用【快速入门Git】
本文详细介绍了Git版本控制系统的基础概念和常用命令,包括工作区、暂存区和版本库的区别,文件状态的变化,以及如何进行文件的添加、提交、查看状态、重命名、删除、查看提交历史、远程仓库操作和分支管理,还涉及了Git标签的创建和删除,旨在帮助读者快速入门Git。
Git基础命令,分支,标签的使用【快速入门Git】