最近因为要团队工作需要使用Git进行代码管理,之前虽然学习过但是用的很少并且很多命令都有遗忘,因此写此Git常用命令总结。
Git 基本操作
Git 常用的是以下 6 个命令:git clone、git push、git add 、git commit、git checkout、git pull
一个简单的操作步骤:
1 | git init - 初始化仓库。 |
创建仓库命令
下表列出了 git 创建仓库的命令:
命令 | 说明 |
---|---|
git init |
初始化仓库 |
git clone |
拷贝一份远程仓库,也就是下载一个项目。 |
提交与修改
Git 的工作就是创建和保存你的项目的快照及与之后的快照进行对比。
下表列出了有关创建与提交你的项目的快照的命令:
命令 | 说明 |
---|---|
git add |
添加文件到暂存区 |
git status |
查看仓库当前的状态,显示有变更的文件。 |
git diff |
比较文件的不同,即暂存区和工作区的差异。 |
git commit |
提交暂存区到本地仓库。 |
git reset |
回退版本。 |
git rm |
将文件从暂存区和工作区中删除。 |
git mv |
移动或重命名工作区文件。 |
git checkout |
分支切换。 |
git switch (Git 2.23 版本引入) |
更清晰地切换分支。 |
git restore (Git 2.23 版本引入) |
恢复或撤销文件的更改。 |
提交日志
命令 | 说明 |
---|---|
git log |
查看历史提交记录 |
git blame <file> |
以列表形式查看指定文件的历史修改记录 |
远程操作
命令 | 说明 |
---|---|
git remote |
远程仓库操作 |
git fetch |
从远程获取代码库 |
git pull |
下载远程代码并合并 |
git push |
上传远程代码并合并 |
创建新仓库
创建新文件夹,打开,然后执行
1 | git init |
以创建新的 git 仓库
检出仓库
执行如下命令以创建一个本地仓库的克隆版本:
1 | git clone /path/to/repository |
如果是远端服务器上的仓库,你的命令会是这个样子:
1 | git clone username@host:/path/to/repository |
git clone 时,可以所用不同的协议,包括 ssh, git, https 等,其中最常用的是 ssh,因为速度较快,还可以配置公钥免输入密码。各种写法如下:
1 | git clone git@github.com:fsliurujie/test.git --SSH协议 |
工作流
本地仓库由 git 维护的三棵“树”组成。
第一个是你的 工作目录
,它持有实际文件;就是你在电脑里能看到的目录。
第二个是 暂存区(Index)
,它像个缓存区域,临时保存你的改动;一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
最后是 HEAD
,它指向你最后一次提交的结果。
添加、提交和推送
你可以提出更改(把它们添加到暂存区),使用如下命令:
1 | git add <filename> |
之后使用如下命令以实际提交改动:
在 Linux 系统中,commit 信息使用单引号 **’,Windows 系统,commit 信息使用双引号*”***。
1 | git commit -m "代码提交信息修改注释" |
你的改动现在已经在本地仓库的 HEAD 中了。执行如下命令以将这些改动提交到远端仓库。
你可以把 master 换成你想要推送的任何分支。
1 | git push origin master |
如果你还没有克隆现有仓库,并欲将你的仓库连接到某个远程服务器,你可以使用如下命令添加:
1 | git remote add origin <server> |
分支管理
分支是用来将特性开发绝缘开来的。在你创建仓库的时候,master 是“默认的”分支。在其他分支上进行开发,完成后再将它们合并到主分支上。
创建一个叫做“feature_x”的分支,并切换过去:
1 | git checkout -b feature_x |
切换回主分支:
1 | git checkout master |
再把新建的分支删掉:
1 | git branch -d feature_x |
除非你将分支推送到远端仓库,不然该分支就是 不为他人所见的:
1 | git push origin <branch> |
创建分支命令:
1 | git branch (branchname) |
切换分支命令:
1 | git checkout (branchname) |
列出分支基本命令:
1 | git branch |
没有参数时,git branch 会列出你在本地的分支。
删除分支命令:
1 | git branch -d (branchname) |
更新与合并
要更新你的本地仓库至最新改动,执行:
1 | git pull |
以在你的工作目录中 获取(fetch) 并 合并(merge) 远端的改动。
要合并其他分支到你的当前分支(例如 master),执行:
1 | git merge <branch> |
在这两种情况下,git 都会尝试去自动合并改动。遗憾的是,这可能并非每次都成功,并可能出现冲突(conflicts)。 git pull 相当于 git fetch + git merge。
这时候就需要你修改这些文件来手动合并这些冲突(conflicts)。
改完之后,你需要执行如下命令以将它们标记为合并成功:
1 | git add <filename> |
在合并改动之前,你可以使用如下命令预览差异:
1 | git diff <source_branch> <target_branch> |
标签
为软件发布创建标签是推荐的。这个概念早已存在,在 SVN 中也有。你可以执行如下命令创建一个叫做 1.0.0 的标签:
1 | git tag 1.0.0 1b2e1d63ff |
1b2e1d63ff 是你想要标记的提交 ID 的前 10 位字符。可以使用下列命令获取提交 ID:
1 | git log |
你也可以使用少一点的提交 ID 前几位,只要它的指向具有唯一性。
替换本地改动
假如你操作失误(当然,这最好永远不要发生),你可以使用如下命令替换掉本地改动:
1 | git checkout -- <filename> |
此命令会使用 HEAD 中的最新内容替换掉你的工作目录中的文件。已添加到暂存区的改动以及新文件都不会受到影响。
假如你想丢弃你在本地的所有改动与提交,可以到服务器上获取最新的版本历史,并将你本地主分支指向它:
1 | git fetch origin |
实用小贴士
内建的图形化 git:
1 | gitk |
彩色的 git 输出:
1 | git config color.ui true |
显示历史记录时,每个提交的信息只显示一行:
1 | git config format.pretty oneline |
交互式添加文件到暂存区:
1 | git add -i |