优大网

标签存档: Git

Git 常用命令

1. 超实用 Alias

alias g="git"
alias gb="git branch"
alias gco="git checkout"
alias gcmsg="git commit -m"
alias gamend="git commit --amend -C HEAD"
alias gst="git status"
alias log="git log --oneline --graph --decorate --color=always"
alias logg="git log --graph --all --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(bold white)—     %an%C(reset)%C(bold yellow)%d%C(reset)' --abbrev-commit --date=relative"

 

2. 取回远端 master 与本地 master 分支合并

gco master

g fetch --all 或者
g fetch origin master

g reset --hard origin/master(本地没有修改,所以完全覆盖也没关系) 或者
g rebase origin/master(本地有修改还没push)

 

3. 推送分支到远端

假设现在所在的分支是 import,指定推送到远端分支 codecloud-import

g push origin import:codecloud-import

假如远端的 liujin-import 分支已经不需要,可以直接覆盖掉

g push -f origin import:codecloud-import

 

4. 追加文件到某个 commit

有时候修完某功能并提交了 commit 之后才发现还有一点小修改,这时候又不想再提交一个commit,可以追加这个文件到前一个commit,步骤如下:

it add 你要追加修改的文件
git commit --amend -C HEAD 或者 gamend

 

5. 查找包含某文件的 commit

git log 文件路径
git show commit_id

or

git log --follow filename(绝对路径)

 

6. 把一个 commit 分拆为两个 commit

老大常说要养成一个小改动对应一个commit的习惯,但是有时候写得太乱懒得去分割就把很多改动做成了一个commit,这样子增加了以后维护的难度,所以要把一个 commit 分拆为多个 commit 怎么办呢?

首先把你要分拆的 file reset 了:

git reset HEAD~1 path/to/file
# This doesn't delete your changes to path/to/file

接着修改当前这个 commit 的 message,命令是:

git commit --amend -v
# -v参数是打开editor编辑

然后就可以把 reset 出来那个 file 新建一个 commit,命令是:

git commit -v path/to/file

 

7. 删除某些 commit

git rebase -i HEAD~10

 

8. 追加修改到之前某个 commit

假如 gst 发现已经有文件被修改,这时候需要把修改暂存起来。

git stash

接着找到你需要追加修改的那个commit id,如4b739bb

g rebase 4b739bb~ -i 或者
g rebase -i HEAD~5 #列出最近5个commit

这时候会自动打开编辑器,把你需要修改的 commit 前面的 pick 改成 edit,保存,关闭编辑器,这时候会回到终端,再输入:

g stash pop

把暂存的修改读出来,然后做修改,g add .,最后

g rebase --continue

 

9. 查找含有特定关键字的 commit

git log –grep
最基本的用法
git log –grep=frotz –grep=nitfol –since=1.month
查找一个月以内commit log message里含有 frotz 或者 nitfol 的 commits

git log –grep=frotz –author=Linus
查找指定作者

git grep -l -e frotz –and -e nitfol
查找同一行含有 frotz 和 nitfol 的文件

git grep -l –all-match -e frotz -e nitfol
查找文件里面含有 frotz 和 nitfol 的文件(不局限于同一行)

 

10. 清空 git working copy 还没追踪的文件

git clean -f

git clean -f -d
如果还想删除目录

git clean -f -X
如果只是想删除忽略的文件

git clean -f -x
如果想删除忽略和非忽略的文件

 

11. 清理本地仓库

长时间做一个项目,经常需要 git fetch,这样做每次都会拉回远端的全部分支。
即使远端有些分支已经删除,但是运行git branch -a还是会显示已删除的分支,
长时间下来这个列表就会很长很长,这时候就需要清理一下本地的仓库了:

git remote prune origin
# `prune`会删除任何不存在于远端仓库的分支,这样运行 `git branch -a`命令的时候顿时就清静了

 

12. 创建追踪远端分支的本地分支

gb dev origin/r1-dev
#Branch dev set up to track remote branch r1-dev from origin.

13. 分支移动

g branch -f master HEAD~3
# 把 master 分支强制移到 HEAD 前面第三个 commit

 

14. Revert一个 Merge

git revert -m 1 M -> W

---o---o---o---M---x---x---W
              /
      ---A---B

 

15. 获取短的 commit hash

git rev-parse --short HEAD

 

16. commit 了以后才记起来忘了创建 .gitignore, 垃圾文件都已经提交

比如说一个nodejs项目,一开始的时候就忘记了创建.gitnore文件忽略掉node_modules的内容,所以其中的内容就已经被提交了。

即使紧接着你在.gitignore加了一行node_modules, 已经被提交的文件是不会自动删除的。

这时候你就需要做的就是:

git rm --cached path/to/ignored
#nodejs案例就是
git rm -r --cached node_modules

 

17. 提交所有被删除的文件

$ git add -u

这个命令告诉 git 自动更新已跟踪的文件, 包括被删除的已跟踪文件。

如果你用的是 git 2.0

$ git add -u :/

友情提示:从 git 2.0(2013年中)开始,以上命令会 stage 整个 working tree 的文件。
如果你只是想 stage 当前目录的文件,应该这么用:

$ git add -u .

 

18. 撤销上一次 git add . 操作

这种情况通常是因为忘记添加.gitignore文件,或者一时手快把一些非必要的文件(如node_modules)跟踪了, 解决办法:

git reset

该命令会 unstage 你上一个 commit 增加的所有文件。

如果你只想 unstage 某些文件:

git reset --

还可以 unstage 文件里某处的改动:

git reset -p

摘自:http://finalshares.com/read-7236?jike-24

直接拿来用!10段超有用的Git命令行代码

 

摘要:本文分享了10条非常有用且先进的Git命令行语句,无论是运用在团队环境或是在私人项目中,你都可以直接来拿用。

本文分享了10条非常有用且先进的Git命令行语句,无论是运用在团队环境或是在私人项目中,你都可以直接来拿用。

1.  在最后提交中更改Export(Export changes done in last commit 

这个命令通常会使用定期发送已更改的项目,以方便其他人审查/集成。

 

1
git archive -o ../updated.zip HEAD $(git diff --name-only HEAD^)

 

2.  在两次提交之间更改Export文件(Export changed files between two commits)

同样地,如果你需要在两次提交之间更改文件,可以选择以下这段代码。

 

1
git archive -o ../latest.zip NEW_COMMIT_ID_HERE $(git diff --name-only OLD_COMMIT_ID_HERE NEW_COMMIT_ID_HERE)

3. 克隆一个特定的远程分支(Clone a specific remote branch) 

 

如果你想从远程资源库中克隆一个特定的分支,而无需克隆整个资源库分支,那么下面的这段代码将对你有用。
 

 

 

1
2
3
git init 
git remote add -t BRANCH_NAME_HERE -f origin REMOTE_REPO_URL_PATH_HERE 
git checkout BRANCH_NAME_HERE

4.  从不相关的本地资源库中应用补丁(Apply patch from Unrelated local repository) 

这里有个快捷方式可帮助你实现。

 

1
2
view plaincopy to clipboardprint?
git --git-dir=PATH_TO_OTHER_REPOSITORY_HERE/.git format-patch -k -1 --stdout COMMIT_HASH_ID_HERE| git am -3 -k

5.  检查分支是否在其它分支中遭到更改(Check if your Branch changes are part of Other branch)

 

cherry这个命令,能够检查你的分支在其他分支中是否被更改。它会在当前的分支上显示变化,并注明+或-标识符。+代表不存在,-表示在现有的分支中存在。

 

1
2
3
4
view plaincopy to clipboardprint?
git cherry -v OTHER_BRANCH_NAME_HERE
#For example: to check with master branch 
git cherry -v master  <br>

 

6. 启动一个无历史记录的新分支( Start a new Branch with No History)

有时,你想启动一个新的分支,但并不想运行漫长的历史记录,例如,你想将代码放置在一个公共的域中(开源),但又不想共享历史。

 

1
git checkout --orphan NEW_BRANCH_NAME_HERE

7. 从其他分支签出文件但无需切换分支( Checkout File from Other Branch without Switching Branches 

这里将教你如何获取想要的文件。

 

1
git checkout BRANCH_NAME_HERE -- PATH_TO_FILE_IN_BRANCH_HERE

 

8. 忽略追踪文件中的更改( Ignore Changes in a Tracked File )

如果你是在某个团队中工作,他们都在使用同一个分支,也许你会频繁使用提取/合并(fetch/merge),但这有时需要重置特定的配置文件,这就意味着在每次合并后你必须去做更改。现在,使用这个命令,你可以要求Git忽略更改特定文件。

 

1
git update-index --assume-unchanged PATH_TO_FILE_HERE

9. 检查已提交部分是否在发布的版本中遭到更改(Check if committed changes are part of a release)
 

name-rev这个命令可以告诉你已提交到最新版本的某个位置。使用这个代码可帮助你检查,提交的部分是否在已发布版本中遭到更改。

1
git name-rev --name-only COMMIT_HASH_HERE

10. 用复位替代合并(Pull with rebase instead of merge )

当某项特性分支被合并到主流中,此时该分支合并会在Git中以合并提交来进行记录。但是当团队中多个成员在同一个分支上工作时,常规的合并会导致多个合并消息在日志中呈现混乱状态。因此,你可以使用复位(rebase)来保持历史清晰,清除无用的合并消息。

 

1
git pull --rebase

此外,你还可以通过配置一个特定的分支来复位。
 

 

1
git config branch.BRANCH_NAME_HERE.rebase true

英文出自: Webdeveloperplus

 

http://www.csdn.net/article/2013-08-22/2816665-10-useful-advanced-git-commands

切换到Git的8个理由

提到版本控制,最近大家都在谈Git。当然,四处议论纷纷还不足以证明切换到Git上有多么正确。这里有一些能证明Git非常出色的有力事实。

 

1. 节省时间

想象一下,每次动鼠标前你都要等待5分钟。这非常讨厌是不是?有了版本控制也是一样——我们每个命令消耗几秒,但是工作一天也累积起来了。但是Git快如闪电。把你的时间用在其他更重要的事情上,而不是等待版本控制工具的响应。

null

 

2. 离线工作

你出差的时候要工作怎么办?用诸如Subversion或者CVS的集中式版本控制系统,如果你不能连上中央版本库你就不能工作。有了Git,在你的本地机器上几乎能做任何事:提交、查看项目完整历史记录、合并(merge)或者新建分支……Git让你来决定何时何地开始工作。

 

3. 回退错误

有时候我会犯错(我也不敢相信!)。我喜欢Git的是它的一个小小的回退命令就能用于几乎任何场景。修正最后一次提交,因为你忘记包含一个小改动。撤销整个提交,因为那个特性已经不再需要。而且当处境变得困难时,你甚至可以用Reflog来恢复“已删除”的提交——因为在幕后Git极少会真正删除什么。这样心定气闲。

 

4. 睡得香

你曾经粉碎过Subversion的版本库吗?我就做过(我说这个的时候记忆的伤痛犹在)。有了Git,我可以信心十足,因为团队里每个人在自己电脑上的克隆就是一份可用的备份。另外Git里的几乎每个操作都是增加数据(很少有删除的)。想搞砸都很难。这种感觉很好。

 

5. 产生有用的提交

把牛奶、冰淇淋和番茄投到搅拌机里会有(至少)两个问题。首先,启动搅拌机后,看着这一团东西,没人能说出你实际上放入的是什么。另外,你没办法把番茄再“回滚”。你做的一批不相关的提交(一点点A特性,再带一点B特性,还有一个小小的补丁……)也是一样的。对你的队友来说,很难理解发生了什么。当出现问题时,他们也不能简单地回滚特性A。Git能帮你避免这种混乱和创建粒状提交。其独一无二的“缓存区”概念能让你决定在下一个提交里到底包含哪些改动,甚至小到哪些行。这是版本控制的用处所在。

 

 

 

6. 按自己的方式工作

当用Git工作时,你可以有你自己的工作流程。那个你觉得好的流程。使用Git你不需要成为编程高手。当然你可以连接多个远程的版本库,用变基(rebase)代替合并,需要时工作在子模块上。但是你也可以只是简单地工作在一个中央远程版本库上,如同在用Subversion一样。不管你的工作流程怎样,所有其他的优点都还在。

 

7. 不会把东西搞混了

分开关注是追踪事情的最高原则。当你工作在特性A上时,任何事(人)都不会被你未完成的代码所影响。如果这个特性不再需要了呢?或者如果在10个提交之后,你发现你做的完全不对呢?分支是这些问题的答案。其他的版本控制系统也有分支,但是Git是第一个让它做好它该做的:快速简单。

 

 

 

 

8. 潮流

只有死鱼才随波逐流。有时候聪明的开发者也这样。Git被越来越多的知名公司和开源项目所使用:Ruby On Rails,jQuery,Perl,Debian,Linux内核,还有很多。大型的社区通常自身就是一个优点,因为一个生态圈会围绕着该系统演进。大量的学习指南,工具,还有服务,会让Git变得更加吸引人。

 

英文原文:git-tower,编译:伯乐在线 – @奇风余谷

译文链接:http://blog.jobbole.com/41527/

GIT使用

VSS,SVN,Git,HG,TFS,后面2个待试用

一、安装

1、msysgit下载地址:

http://code.google.com/p/msysgit/downloads/list
本次下载版本——Git-1.8.1.2-preview20130201.exe

2、TortoiseGit下载地址:
http://code.google.com/p/tortoisegit/downloads/list
本次下载版本——TortoiseGit-1.8.3.0-64bit.msi

安装顺序:首先安装msysgit;然后安装TortoiseGit。

 

二、使用记录

在桌面空白处点击右键,右键菜单中会加入TortoiseGit->Settings->Network,设置SSH路径。如下图所示:

clip_image016[4]

选择“Git”选项卡,设置用户名、邮箱和key。如下图所示:

clip_image018[4]

注:如果暂时在本地使用就只需将用户名和邮箱添加,而“Signing key”会自动生成。

至此,TortoiseGit设置完成。

 

生成秘钥

在git工程右键选择Git bash

在命令行中执行命令:

ssh-keygen -t rsa -C “username@email”

出现提示,点击回车。

然后输入两次密码。
密钥生成成功,一般在目录C:\Users\Administrator\.ssh
其中id_rsa为私钥,id_rsa.pub为公钥
将id_rsa.pub中的内容复制到GITHUB的 SSH key,此时你就可以使用SSH与GITHUB通信了。

 

 

解决“Git Windows客户端保存用户名与密码”的问题

1. 在Windows中添加一个环境变量HOME=%USERPROFILE%

2. 在“开始》运行”中打开%Home%,新建一个名为“_netrc”的文件。

machine github.com
login user_name(你的用户名)
password pwd(你的密码)

Copyright © 2024 优大网 浙ICP备13002865号

回到顶部 ↑