Git 常用命令

原文地址:http://blog.youkuaiyun.com/ariesjzj/article/details/7747876

Git和SVN,CVS一样,是一种源代码管理系统。和后两者不同的是,它不仅可以集中式管理,也可以以分布式的形式工作,即所有操作都在本地,速度快,且本地提交不会影响共享的代码仓库。Git功能很多,本文列了一些常见用法。

配置和创建代码仓库
设置提交时的编辑器(默认是nano):
$ export GIT_EDITOR=vim  
或者
$ git config --global core.editor vim

设置文件比较工具:
$ git config --global merge.tool vimdiff

$ git config --global diff.tool vimdiff

$ git config --global difftool.prompt No

忽略文件权限:

$ git config core.filemode false


配置个人信息,即提交时显示的作者信息,如:
$ git config user.name "jzj"
$ git config user.email " jzj@domain "


这些git config命令其实是写到~/.gitconfig这个配置文件中,直接写这个文件效果是一样的,比如要使git命令的输出有高亮,则在.gitconfig中加

[color]

    ui = auto


创建一个新Git仓库:
$ git init

查询信息(inquiry)
这部分和SVN中对应命令很像

查看配置信息:
$ git config --list

查看仓库的状态信息:
$ git status

查看两个版本的差异
$ git diff 
由于Git中引入了index的概念,因此和svn相比,git diff可分为加--cached和不加两种:
$ git diff  # 显示本地改动但没有stage的改动
$ git diff --cached # 显示已经stage过的本地改动,也就是如果执行git commit会提交的改动

$ git diff master..test # 两个branch间的差别
$ git diff --stat  # 显示统计信息

历史信息
$ git log
$ git log -p # 显示patch
$ git log --stat  # 行数统计
$ git log --topo-order --graph # 用简单图形显示commit间的拓扑关系
$ git log -n # 仅列出前n个
$ git show-branch  --more=n # 前n个提交历史信息

查看更改内容
$ git show <sha> # 查看指定commit的改动

另外,对工作目录中文件操作有git ls-files,git grep等命令。

提交(commit)
和SVN不同的是,Git中的Checkin分两步,即stage和commit。如:
$ git add a.c  # stage改动,更改index(index是一个临时动态文件,描述了整个工程目录,并记录了作了哪些改动)。stage过的改动会在git diff --cached中显示出来。
$ git commit -m "comments" # 提交改动

加-a参数可以将前面两步合二为一:
$ git commit -a
但它仅限于tracked的文件。比如新建一个文件但没有git add过,它还是untracked状态,那加-a也没用。

补丁(patch)
生成补丁
$ git format-patch -n  master # 生成最近n次commit的patch
$ git format-patch master~4..master~2 # 生成master~4和master~2之间差异的patch
$ git format-patch -s <sha> # 生成指定commit的patch,加签名
应用补丁
git am 用了git apply,用它打补丁会生成commit信息。如果出现错误
previous rebase directory ../.git/rebase-apply still exists but mbox given
可以用
$ git am --abort

前面方法用于已经commit的更改,如果是用git diff生成的本地修改的patch,则可以用下面方法:
生成本地修改的patch:
$ git diff | tee diff.patch
应用patch时用:
$ git apply --ignore-space-change --ignore-whitespace diff.patch
或者

$ patc -p1 < diff.patch
当然这更像Svn中的习惯,在git里反正是本地提交,提交的成本很低,所以可以先提交再生成patch。

branch之间打patch用:
$ git cherry-pick

撤消(undo)
和撤消相关的有三个命令:git checkout, git revert和git reset。

如取消本地没有stage过的改动(即没有通过git add等命令记录到index中的改动):
$ git checkout . # index不变,工作目录改变

再如
$ git checkout HEAD^  # 返档到前一次commit的版本
$ git checkout <sha>  # 返档到指定commit版本

git reset 不仅作用于工作目录,而且作用于index文件。git reset有三种方式,分别为soft, hard和mixed方式。
$ git reset --soft <sha> # 既不影响index也不影响工作目录,也就是说用git diff --cached还是可以看到撤消的改动
$ git reset --mixed <sha> # index改变,但工作目录不变
$ git reset --hard <sha>,# 将index和工作目录都恢复到指定版本。相当于svn revert -R *
撤消后,git log无法看到撤消的commit历史,但可以用下面命令看到:
$ git reflog

git checkout和git reset --hard的区别在于:
git checkout .  # 清除本地更改,但不清除index。举例来说,之前git add但没commit的作用还在。
git reset --hard HEAD  # 清除本地更改,包括index。所以git add过的也清除了。

git revert 进行一次与指定版本相反的commit。如:
$ git revert <sha> # commit一次和<sha>指定commit相反的改动
$ git revert -n <sha> # 和前一命令一样,但不提交
git revert可以把中间的commit作用消除,且git revert不会改变已有的历史记录。当项目是基于已有Git仓库时这很有用。

如果只是想修改commit时的提交信息,可以用:
$ git commit --amend

分支(branch)
新建
$ git branch new_branch

$ git checkout -b new_branch
查看
$ git show-branch
提取
$ git checkout new_branch
删除
$ git branch -d new_branch
归并其它分支
$ git merge branchname

杂项:
某些文件不需要让Git去track,可以在.gitignore中设置忽略这些文件。

指定特定文件用--,如:
$ git checkout -- dir/main.c

Git有几个内置的符号索引指针:
HEAD:永远指向当前分支的最近一次commit
ORIG_HEAD:git reset或git merge后,原来的HEAD被存在这里
FETCH_HEAD:git fetch后所有分支的头索引指针
MERGE_HEAD:git merge时另一分支的头索引指针

相对索引:HEAD^ HEAD^^ HEAD~2 HEAD@{2}等

如果手头的工作做了一半,但有一个小的但紧急的bug要fix,可以用git stash。它像一个栈一样将当前的工作上下文push到栈中,当bug fix完了再pop出来。
$ git stash "current work"
$ git commit -a -m "trivial bug fix"
$ git stash apply
 
gitk:图形化的git diff

当碰到regression时,可以用git bisect和git blame。前者用来查找问题从哪个版本开始出现,后者列出每行代码的修改者和时间。

分布式管理
复制代码仓库
$ git clone /tmp/repo repo # 在当前目录下创建/tmp/repo的代码仓库拷贝

复制远程代码仓库(如用户名zjin,主机名zjin-machine)

$ git clone zjin@zjin-machine:/home/zjin/repo

向远程代码仓库提交
$ git push /tmp/repo master # 将本地master分支中的改动提交到/tmp/repo中
从远程代码仓库同步
$ git pull /tmp/repo master # 将/tmp/repo中的改动同步到本地的master分支中
该命令相当于git fetch 加 git merge

 



一些相关资料:
给SVN用户的Git教程 http://git.or.cz/course/svn.html
Repo和Git http://source.android.com/source/version-control.html
活灵活现用Git-技巧篇 http://phoenixtoday.blogbus.com/logs/35149540.html
《Version Control with Git》
《Git Community Book》

<think>我们被要求生成一个关于Git常用命令的汇总列表。根据用户的要求,我们需要提供结构清晰的回答,并尽量保证真实可靠。同时,我们参考了站内引用中提供的Git命令信息。根据引用内容,我们可以整理出以下常用命令:1.基本操作(初始化、添加、提交等)2.分支管理3.远程仓库操作4.标签管理5.历史查看与撤销6.其他实用命令(如删除大文件、清理仓库等)我们将按照这些类别来组织命令。注意:由于引用中提供了一些特定问题的解决方案(如删除大文件),我们也会将其作为实用命令的一部分。另外,注意用户要求使用中文回答,并且行内数学表达式使用$...$格式(但本问题不涉及数学表达式,所以忽略),独立公式使用$$...$$格式(同样不涉及)。同时,在回答末尾生成相关问题。我们开始整理Git常用命令汇总:</think>### Git常用命令汇总 以下是Git常用命令分类整理,帮助您高效管理代码版本: #### 1. 仓库初始化与基础操作 ```bash # 初始化新仓库 $ git init # 克隆远程仓库 $ git clone <远程仓库URL> # 查看当前状态 $ git status # 添加文件到暂存区 $ git add <文件名> # 添加单个文件 $ git add . # 添加所有修改 # 提交更改 $ git commit -m "提交说明" ``` #### 2. 分支管理 ```bash # 创建分支 $ git branch <新分支名> # 切换分支 $ git checkout <分支名> $ git switch <分支名> # Git 2.23+推荐方式 # 创建并切换分支 $ git checkout -b <新分支名> $ git switch -c <新分支名> # 合并分支 $ git merge <要合并的分支名> # 删除分支 $ git branch -d <分支名> # 安全删除 $ git branch -D <分支名> # 强制删除未合并分支 ``` #### 3. 远程仓库操作 ```bash # 添加远程仓库 $ git remote add origin <远程仓库URL> # 查看远程仓库 $ git remote -v # 推送到远程仓库 $ git push -u origin <分支名> # 首次推送 $ git push # 后续推送 # 拉取远程更新 $ git pull origin <分支名> $ git pull --rebase origin <分支名> # 变基式拉取 # 删除远程连接 $ git remote rm origin ``` #### 4. 版本回退与撤销 ```bash # 查看提交历史 $ git log $ git log --oneline # 简洁版日志 # 撤销工作区修改 $ git checkout -- <文件名> # 撤销暂存区文件 $ git reset HEAD <文件名> # 版本回退 $ git reset --hard <commit_id> # 彻底回退 $ git reset --soft <commit_id> # 保留修改 # 恢复删除的文件 $ git restore <文件名> # Git 2.23+ ``` #### 5. 标签管理 ```bash # 查看标签 $ git tag # 创建标签 $ git tag <标签名> # 轻量标签 $ git tag -a v1.0 -m "版本说明" # 附注标签 # 推送标签 $ git push origin <标签名> # 删除标签 $ git tag -d <标签名> # 本地删除 $ git push origin :refs/tags/<标签名> # 远程删除 ``` #### 6. 高级维护 ```bash # 清理历史大文件 $ git filter-branch --force --index-filter \ 'git rm -rf --cached --ignore-unmatch <文件名>' \ --prune-empty --tag-name-filter cat -- --all # 回收存储空间 $ git reflog expire --expire=now --all $ git gc --prune=now # 查看仓库大小 $ git count-objects -vH ``` #### 7. 配置相关 ```bash # 设置用户名/邮箱 $ git config --global user.name "用户名" $ git config --global user.email "邮箱" # 查看配置 $ git config --list # 设置默认编辑器 $ git config --global core.editor vim ``` > **最佳实践提示**: > 1. 频繁提交小变更,保持提交记录清晰 > 2. 使用`.gitignore`文件排除无需版本控制的文件 > 3. 重要分支(如main/prod)设置保护规则 > 4. 推送前先执行`git pull --rebase`避免合并提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值