Git常用命令小结

1
2
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com

设置用户名称与邮件地址

1
git config --global core.editor "'C:\Program Files\Notepad++\notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

设置默认文本编辑器

1
git config --list

列出所有 Git 当时能找到的配置

1
git init

在现有目录中初始化仓库

重点

1
2
git add *.c
git add LICENSE

开始对指定文件的跟踪
或 更新文件到暂存区

展开
收起
1
2
3
4
5
6
7
8
9
10
git add .
将此目录和子目录的文件全部更新到暂存区(用.gitignore 忽略的文件除外)
git add *
将此目录和子目录的文件全部更新到暂存区(用.gitignore 忽略的文件除外)(不更新.gitignore文件)
git add *.txt
将此目录符合条件的更新到暂存区
git add 文件夹/
将整个文件夹及其内容更新到暂存区
git add [正则表达式]
用正则表达式将符合条件的更新到暂存区
1
git status

查看文件暂存状态

1
git status -s

查看文件暂存状态简览

文件.gitignore 忽略文件

展开
收起

忽略文件

1
2
3
$ cat .gitignore 
*.[oa]
*~

第一行告诉 Git 忽略所有以 .o 或 .a 结尾的文件。一般这类对象文件和存档文件都是编译过程中出现的。 第二 行告诉 Git 忽略所有以波浪符(~)结尾的文件,许多文本编辑软件(比如 Emacs)都用这样的文件名保存副 本。

文件 .gitignore 的格式规范如下:
• 所有空行或者以 开头的行都会被 Git 忽略。
• 可以使用标准的 glob 模式匹配。
• 匹配模式可以以(/)开头防止递归。
• 匹配模式可以以(/)结尾指定目录。
• 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。

所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。 星号(*)匹配零个或多个任意字符;[abc] 匹配 任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(? )只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配 (比如 [0-9] 表示匹配所有 0 到 9 的数字)。 使用两个星号(*) 表示匹配任意中间目录,比如 a/**/z 可以匹配 a/z , a/b/za/b/c/z 等。

我们再看一个 .gitignore 文件的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# no .a files
*.a

# but do track lib.a, even though you're ignoring .a files above
!lib.a

# only ignore the TODO file in the current directory, not subdir/TODO
/TODO

# ignore all files in the build/ directory
build/

# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt

# ignore all .pdf files in the doc/ directory
doc/**/*.pdf

TIP: GitHub 有一个十分详细的针对数十种项目及语言的 .gitignore 文件列表,你可以在 https://github.com/github/gitignore 找到它.

1
git diff

通过文件补丁的格式查看已暂存和未暂存的变化,显示具体哪些行发生了改变。

展开
收起
1
git diff --staged

查看已暂存的将要添加到下次提交里的内容。

重点

1
git commit

提交更新

展开
收起
1
git commit --amend

重新提交并覆盖上一次提交的数据

1
git rm

从 Git 中移除某个文件

展开
收起
1
git rm --cached README

当我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。 换句话说,你想让文件保留在磁盘但是并不想让 Git 继续跟踪。可以使用这种方法。

1
git mv file_from file_to

移动文件/重命名文件

1
git log

查看提交历史

1
git commit --amend

撤消操作:重新提交并代替上一次提交结果

1
git reset HEAD <file>

取消暂存文件

1
git checkout -- [file]

撤消对文件的修改

1
git clone [url]

克隆仓库

展开
收起
1
git clone https://github.com/libgit2/libgit2 mylibgit

如果你想在克隆远程仓库的时候,自定义本地仓库的名字,你可以使用此命令。

1
git branch (branchname)

创建分支

1
git checkout (branchname)

切换分支

1
git merge

合并分支

1
git branch

列出分支

1
git tag

列出标签

1
2
git tag -a <标签名字>
git tag -a <标签名字> -m <提交信息>

创建附注标签

1
git tag <标签名字>

创建轻量标签

1
ssh-keygen -t rsa -C "youremail@example.com"

配置验证信息:生成SSH Key
会在~/下生成.ssh文件夹,进去,打开id_rsa.pub,复制里面的key。到github上,进入 Account Settings(账户配置),左边选择SSH Keys,Add SSH Key,title随便填,粘贴在你电脑上生成的key。
验证是否配置成功:ssh -T git@github.com
更多帮助:https://help.github.com/cn/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent

重点

1
git push <远端仓库路径>   <分支名>

将文件推送到远程仓库

展开
收起

例如:

1
git push -u <远端仓库路径> master

将本地的master分支推送到远端仓库,同时指定该远端仓库为默认主机,后面就可以不加任何参数使用git push了。

1
git remote add [shortname] [url]

指定一个简单的名字,以便将来引用该仓库
如:git remote add origin git@github.com:mojombo/grit.git

1
git remote -v

执行时加上 -v 参数,你还可以看到每个别名的实际链接地址。

1
git remote rm [别名]

移除引用

1
git remote rename <原别名>  <新别名>

重命名引用的名字

1
git fetch

从远程仓库下载新分支与数据

1
git pull

从远端仓库提取数据并尝试合并到当前分支

展开
收起

例如:

1
git pull <远端仓库路径> <远程分支名>:<本地分支名>

将远端仓库中的远程分支合并到本地分支