# Git 常见指令

注:本文中带尖括号(<>)的标签是需要被替换为对应文本的标记。

# 索引




# 常用操作

# 添加文件

git add <file>

以下参数可以一次性添加所有文件:

参数/符号 全称 区别
. 即工作区的状态树 包括文件内容修改、新文件,不包括被删除文件
* 通配符 会忽视.gitignore 把所有文件加入(其他的不会)
-u --update 仅监控已经被 add 的文件,不会提交新文件
-A --all 既包含删除文件,也会提交新文件

# 提交文件

git commit -m <message>

# 查看暂存状态

git status

# 修改操作

# 修改最后一次提交

例子:

git commit -m 'initial commit'
git add forgotten_file
git commit --amend -m 'initial commit'

该情况下,最终只会产生一个提交,第二个提交命令修正了第一个的提交内容。


# 修改 commit 时间

在 commit 的时候添加参数--date="<commit-time>"即可,注意时间要按照格式输入。

例子:修改上次提交(--amend)的 commit 的时间(--date

git commit --amend --date="Sun, 25 Dec 2016 19:42:09 +0800"

# 撤销操作

# 取消暂存的文件

git reset HEAD <file>

git status 命令其实自带提醒如何取消:

$ git add .
$ git status
On branch master
Changes to be committed:
    (use "git reset HEAD <file>..." to unstage)

        modified:   README.txt
        modified:   benchmarks.rb

# 删除暂存的文件

不删除物理文件,仅将该文件从缓存中删除:

git rm -r --cached <file>

-r 参数:即 --recursive,递归删除目录及其内容(用于文件夹)


# 取消修改/退回文件版本

git checkout -- <file>

这同样在 git status 命令中有所提示:

$ git checkout -- benchmarks.rb
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   README.txt

注意:此方法会覆盖你修改好的文件且无法找回,使用前需确保操作正确。建议使用 tashing 和分支来处理此问题。


# 删除某文件的全部提交记录

如果有一些隐私内容被提交进了 git 仓库,后续当要发布给其他人时想要删掉即可使用本命令。

原理:对所有文件的 commit log 进行重写,然后排除掉想要删掉的某些文件。

git filter-branch -f --tree-filter 'rm -rf aaa/app.config' HEAD

注意提前做好被删除文件的备份。

如果需要 push 到远程仓库,需要:

git push origin --force

# 远程仓库

# 添加远程仓库

git remote add origin <url>

如果想修改远程仓库地址:

git remote set-url origin <new-url>

# 发送至远程仓库

git push
参数 作用
-f / --force 强制覆盖远程仓库
-u 选择当前为默认仓库分支

# 克隆其他仓库

git clone <url> [renamed-name]

# 从远程仓库更新本地

git pull <远程主机名> [<远程分支名>[:<本地分支名>]]
# 等价于
git fetch <远程主机名> [<远程分支名>[:<本地分支名>]]
git merge FETCH_HEAD

# 冷门指令

收一些我用了一次的指令

# 修改远程库地址

git remote set-url origin git@github.com:USERNAME/REPOSITORY.git

其中的 url 使用 HTTPS 或者 SSh 都可以。


上次更新: 2021/2/6 10:45:36