git commands 总结

26 篇文章 1 订阅
21 篇文章 2 订阅

git功能很强大,但往往只用自己熟悉的命令,有很多神奇的魔法没有用到,总结记录一下。

目录

一、Git 配置

二、获取与创建项目

三、快照

四、分支与合并

五、项目分享与更新

六、检查与比较

七、调试

八、补丁

九、未完待续


一、Git 配置

git config 改变git的默认配置,例如你的名字,指定的终端颜色,指定的编译器等。        

// 设置你的名字和邮箱:
$ git config --global user.name "XiaoMing"
$ git config --global user.email XiaoMing@example.com

// 设置你使用的编译器, 以Emacs为例:
$ git config --global core.editor emacs
// 注意:编译器有很多,参数并不一定就是编译器的名字,git config有编译器参数列表,不在此描述

// 设置main作为你默认分支的名字:
$ git config --global init.defaultBranch main

// 查看你当前的git配置:
$ git config --list

// git命令配置为自定义命名,例如使用co代替checkout,使用br代替branch。
$ git config --global alias.co checkout
$ git config --global alias.br branch

git help 用来显示任何命令的git自带文档。

// 查看config的使用说明
$ git help config

二、获取与创建项目

有两种方式获得一个git仓库;一种是从网络或者其他地方拷贝一个现有仓库,另一种就是在一个目录中创建一个新的仓库。

git init 可以将一个目录转化为一个git仓库。

// 在目录中创建一个git仓库:
$ cd /home/user/my_project
$ git init

git clone 实质是几个命令的封装;它会创建一个新目录,切换至新目录,然后(git init)初始化一个空的git仓库,再(git remote add)为你指定的URL添加一个默认名称为origin的远程仓库,针对远程仓库执行git fetch,最后通过git checkout 将远程仓库的最新提交检出到本地的工作目录。

// 克隆一个现有仓库
$ git clone https://github.com/libgit2/libgit2 mylibgit

三、快照

git add 将内容从工作目录添加到暂存区,以备下次提交。【git add是一个多功能命令,可以用它开始跟踪文件;或把已跟踪的文件放到暂存区;还可以用于合并时把有冲突的文件标记为已解决状态等。可以理解为“添加内容到下一次提交中”。】

$ git add file.md 
// 这条命令多种情况:
// 如果file.md是新文件,就是 开始跟踪该文件;
// 如果是旧文件,做了修改,就是 把已跟踪的该文件放到暂存区;
// 如果是手动解决冲突就是 用于合并时把有冲突的文件标记为已解决状态。
// 总之,就是 提交这个文件到下一次的提交中。

git status 展示工作区与暂存区中不同状态的文件。包括已修改但未暂存的文件;已暂存但未提交的文件。一般会展示应该如何操作的提示。

// 展示当前状态
$ git status

git diff 展示任意两棵树的差异。默认是查看你工作区与暂存区的差异。git diff --staged 查看暂存区与最后提交之间的差异。git diff master branchB 查看两个提交记录的差异。

// 查看你工作区与暂存区的差异,也就是修改但未暂存的内容
$ git diff

// 查看已暂存和上一次commit之间的差异,
$ git diff --staged

// 提交之前检查可能存在的空白错误
$ git diff --check

// 查看两个分支的差异
$ git diff A B

 git difftool 可以简单地启动一个外部工具来为你展示两个树之间的差异。

git commit 将所有通过git add暂存的文件内容在数据库中创建一个持久的快照,然后将当前分支上的分支指针移到其上。

// 跳过正常工作流程中git add操作
$ git commit -a

// 在命令行中传递提交消息,而不是启动编辑器
$ git commit -m 'update: change timestamp'

// 重做最新的提交
$ git commit --amend

// 对提交进行加密签名
$ git commit -S -m 'update: change timestamp'


$ echo 'First commit' | git commit-tree d8329f

git reset 主要是用来根据你传递给动作的参数来执行撤销操作。它可以移动HEAD指针并且可选的改变index或者暂存区,如果使用--hard参数的话你甚至可以改变工作区。如果错误地为这个命令附加后面的参数,你可能会丢失你的工作区,所以使用前一定要确认完全理解了。

$ git add *
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
modified: CONTRIBUTING.md

// 使用git reset 来取消上面运行的git add操作
$ git reset HEAD CONTRIBUTING.md
Unstaged changes after reset:
M CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: README.md -> README
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: CONTRIBUTING.md


git reset 实现在head index working_directory 之间的切换
// 略

git rm 用来从工作区或暂存区移除文件的命令。为下一次提交暂存一个移除操作,与git add 有类似之处。

$ git rm PROJECTS.md
rm 'PROJECTS.md'
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: PROJECTS.md
$ git commit -m 'rm project.md'


// 如果您忘记在 .gitignore 文件中添加某些内容并且不小心将其暂存,为此,请使用 --cached 选项:
// 将文件保留在工作树中,但将其从暂存区域中删除。不再让 Git 跟踪它。 
$ git rm --cached README

git mv 用于移动一个文件并且在新文件上执行git add命令以及在老文件上执行git rm命令。

$ git mv README.md README
// 相等于下面几个命令的组合:
$ mv README.md README
$ git rm README.md
$ git add README

git clean 用来从工作区中移除不想要的文件。可以是编译的临时文件或者合并冲突的文件。

// 要删除工作目录中所有未跟踪的文件,您可以运行:
$ git clean -f -d
// 它会删除所有文件以及任何因此变为空的子目录。 -f 表示“强制”。
// 还有 -n -i -x 等参数

四、分支与合并

git branch 实际是某种程度上的分支管理工具。它可以列出你所有的分支、创建新分支、删除分支、重命名分支。

// 创建一个新的分支:
$ git branch new_testing

// 获取当前分支的简单列表:
$ git branch

// 查看每一个分支的最后一次提交
$ git branch -v 

// 查看哪些分支已经合并到当前分支
$ git branch --merged ;此时显示的内容,列表中分支名字没有*号的分支都是已经合并到了带*号的分支上,这些不带*的分支可以删除掉。

// 查看所有包含未合并工作的分支
$ git branch --no-merged ;此时显示的内容,列表中分支有未合并的工作,需要合并;

// --merged --no-merged 参数是指当前分支与master分支。也可以针对其他分支
$ git checkout testing
$ git branch --no-merged master

// 删除分支
$ git branch -d <branch_name> ;如果失败;可以使用git branch -D <>强制删除。

// 将一个本地分支设置为您刚刚拉下的远程分支,或者 想要更改您正在跟踪的上游分支
$ git branch -u origin/serverfix ;
// 可达到新建一个分支并关联远程分支的效果。即 git checkout -b <branchA> origin/serverfix

git checkout 用来切换分支,或者检出内容到工作目录。

// 切换分支
$ git checkout <BranchA>

// 跟踪远程分支
$ git checkout --track origin/serverfix
$ git checkout -b sf origin/serverfix 创建一个sf分支来跟踪远程分支

// 用于解决合并冲突。
// 重新签出文件并替换合并冲突标记。 如果您想重置标记并尝试再次解决它们,这可能很有用。
$ git checkout --conflict=diff3 hello.rb

// 取消工作区中某个文件的变更
$ git checkout <file_name>

git merge 用来合并一个或者多个分支到你已经检出的分支中。然后它将当前分支指针移动到合并结果上。

// 合并分支
$ git checkout master
Switched to branch 'master'
$ git merge iss53
Merge made by the 'recursive' strategy.
index.html | 1 +
1 file changed, 1 insertion(+)

        git mergetool 启动一个外部的合并帮助工具,帮助解决git合并中遇到的问题。

        git log 用来展示一个项目的可达历史记录,从最近的提交快照起。默认情况下,它只显示当前分支的历史记录,但是可以显示不同的设置多个头记录或者分支以供遍历。此命令通常也用来在提交记录级别显示两个或多个分支之间的差异。

        git stash 用来临时地保存一些还没有提交的工作,以便在分支上不需要提交未完成工作就可以清理工作目录。

        git tag 用来为代码历史记录中的某一点指定一个永久的书签。一般是用于发布相关事宜。

五、项目分享与更新

        git fetch 命令与一个远程的仓库交互,并且将远程仓库中有但是在当前仓库没有的所有信息拉取下来然后存储在本地数据库中。

        git pull 命令基本上就是git fetch 和git merge 命令的组合,git从你指定的远程仓库中抓取内容,然后马上尝试将其合并进你所在的分支中。

        git push 命令用来与另一个仓库通信,计算你本地数据库与远程仓库的差异,然后将差异推送到另一个仓库中。它需要有另一个仓库的写权限,因此通常需要验证。

        git remote 命令是一个远程仓库记录的管理工具。它允许你将一个长的URL保存成一个简写的句柄,例如origin,这样你就可以不用每次都输入它们。你可以有多个这样的句柄,git remote可以添加、修改、删除它们。

        git archive 用来创建项目一个指定快照的归档文件。

        git submodule 命令用来管理一个仓库的其他外部仓库。它可以被用在库或者其他类型的共享资源上。submodule还有一些子命令(add、update、sync等等)用来管理资源。

六、检查与比较

        git show 命令可以以一种简单的人类可读的方式来显示一个git对象。一般用它来显示一个标签或者一个提交信息。

        git shortlog 用来归纳git log的输出。它可以接受很多与git log相同的选项,但是它并不会列出所有的提交,而是展示一个根据作者分组的提交记录的概括性信息。

        git describe 命令用来接受任何可以解析成一个提交的东西,然后生成一个人类可读的字符串且不可变。这是一种获得一个提交的描述的方式,它跟一个提交的SHA-1值一样是无歧义的,但更具可读性。

七、调试

        git bisect是一个非常有用的调试工具,它通过自动进行一个二分查找来找到哪一个特定的提交是导致bug的第一个提交。

        git blame 命令标注任何文件的行,指出文件的每一行的最后的变更的提交及谁是那一个提交的作者。

        git grep 命令可以帮助在源代码中,甚至是你项目的来版本中的任意文件中查找任何字段或者正则表达式。

八、补丁

        git cherry-pick 命令用来获得在单个提交中引入的变更,然后尝试将作为一个新的提交引入到你当前的分支上。从一个分支单独一个或者两个提交而不是合并整个分支的所有变更。

        git rebase 命令是一个自动化的cherry-pick命令。它计算出一些列的提交,然后再以它们在其他地方以同样的顺序一个一个的cherry-pick出它们。

        git revert 命令本质上就是一个逆向的git cherry-pick操作。它将你提交中的变更以完全相反的方式应用到一个新创建的提交中,本质上就是撤销或者倒转。

九、未完待续

描述相对简单,后续会增加一些命令的详细操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值