初始化仓库
git init
拷贝一份远程仓库
# 默认情况下,Git 会按照你提供的 URL 所指向的项目的名称创建你的本地项目目录。
# 通常就是该 URL 最后一个 / 之后的项目名称。
git clone [url]
# 如果你想要一个不一样的名字, 你可以在该命令后加上你想要的名称。
git clone [url] [filepath_name]
添加文件到暂存区
# 添加一个或多个文件到暂存区:
git add [file1] [file2] ...
# 添加指定目录到暂存区,包括子目录:
git add [dir]
# 添加当前目录下的所有文件到暂存区:
git add .
提交暂存区到本地仓库
# [message] 可以是一些备注信息
git commit -m [message]
# 提交暂存区的指定文件到仓库区
git commit [file1] [file2] ... -m [message]
# -a 参数设置修改文件后不需要执行 git add 命令,直接来提交
git commit -a
查看项目的当前状态
查看在你上次提交之后是否有对文件进行再次修改。
$ git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README
new file: hello.php
通常我们使用 -s 参数来获得简短的输出结果:
AM
状态的意思是这个文件在我们将它添加到暂存区之后又有改动。(add modified)A
状态的意思是这个文件已经被添加到了暂存区。(add)
$ git status -s
AM README
A hello.php
添加新的远程仓库
用于配置远程仓库地址,便于拉取和推送代码,可配置多个地址
# shortname为别名,url为项目git地址
git remote add [shortname] [url]
删除和修改远程仓库
这里修改和删除的是本地的配置,不会影响到远程仓库。
# 删除远程仓库
git remote rm name
# 修改仓库名
git remote rename [old_name] [new_name]
查看当前项目所配置的远程仓库
# 查看所有远程仓库
git remote -v
# 例,origin 为远程地址的别名。
$ git remote -v
origin https://github.com/xxx/xxx (fetch)
origin https://github.com/xxx/xxx (push)
# 查看单个远程仓库的信息
git remote show [remote]
# 例
$ git remote show https://github.com/xxx/xxx
* remote https://github.com/xxx/xxx
Fetch URL: https://github.com/xxx/xxx
Push URL: https://github.com/xxx/xxx
HEAD branch: master
Local ref configured for 'git push':
master pushes to master (local out of date)
从远程拉取代码
git pull
命令用于从远程获取代码并合并本地的版本。git pull
其实就是 git fetch
和 git merge FETCH_HEAD
的简写。
# 命令格式
git pull <远程主机名> <远程分支名>:<本地分支名>
# 对于只有一个远程地址的仓库可以直接pull
git pull
将本地的分支版本上传到远程并合并
# 远程主机是已经配置好的远程git地址对应的名称(远程地址的别名)
# 配置远程git地址及别名使用remote命令
git push <远程主机名> <本地分支名>:<远程分支名>
# 如果本地分支名与远程分支名相同,则可以省略冒号:
git push <远程主机名> <本地分支名>
# 对于只有一个远程地址的项目可以直接push
# 这样push的是当前分支到远程同一分支
git push
# 以下命令将本地的 master 分支推送到 origin 主机的 master 分支。
git push origin master
# 相等于:
git push origin master:master
# 如果本地版本与远程版本有差异,但又要强制推送
# 可以使用 --force 参数:
git push --force origin master
# 删除主机的分支可以使用 --delete 参数,
# 以下命令表示删除 origin 主机的 master 分支:
git push origin --delete master
查看提交历史
# 查看历史提交记录
git log
# 只查看2条记录
git log -2
# 以列表形式查看指定文件的历史修改记录
git blame [file]
# 用 --oneline 选项来查看历史记录的简洁的版本
git log --oneline
# 用 --graph 选项,查看历史中什么时候出现了分支、合并
git log --graph
# 用 --reverse 参数来逆向显示所有日志
git log --reverse
# 查找指定用户的提交日志可以使用命令:git log --author
# 例如我们要找 Git 源码中 Linus 提交的部分:
git log --author=Linus --oneline -5
# 指定日期,可以执行几个选项:--since 和 --before,但是你也可以用 --until 和 --after。
# 例如,要看 Git 项目中三周前且在四月十八日之后的所有提交
git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges
还原本地文件
第一种:要修改的文件已经添加到暂存区。就是git add .
过了,我们需要做如下操作:
1.先把文件恢复到未跟踪状态:
# 单个文件
git reset head [filepath]
# 所有文件
git reset head .
2.撤销文件修改:
# 单个文件
git checkout -- [filepath]
# 所有文件
git checkout .
第二种:要修改的文件未添加到暂存区。就是文件处于untracked状态:
# 单个文件
git checkout -- [filepath]
# 所有文件
git checkout .
回退版本
# --mixed 为默认,可以不用带该参数
# 用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变
git reset [--soft | --mixed | --hard] [HEAD]
git reset [HEAD]
# 回退所有内容到上一个版本
git reset HEAD^
# 回退 hello.php 文件的版本到上一个版本
git reset HEAD^ hello.php
# 回退到指定版本
git reset 052e
# --soft 参数用于回退到某个版本
# 例:回退上上上一个版本
git reset --soft HEAD~3
# --hard 参数撤销工作区中所有未提交的修改内容,
# 谨慎使用 –-hard 参数,它会删除回退点之前的所有信息。
# 将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交:
git reset --hard HEAD
# 回退上上上一个版本
git reset --hard HEAD~3
# 回退到某个版本回退点之前的所有信息
git reset –hard bae128
# 将本地的状态回退到和远程的一样
git reset --hard origin/master
HEAD 说明:
- HEAD 表示当前版本
- HEAD^ 上一个版本
- HEAD^^ 上上一个版本
- HEAD^^^ 上上上一个版本
可以使用 ~数字表示
- HEAD~0 表示当前版本
- HEAD~1 上一个版本
- HEAD^2 上上一个版本
- HEAD^3 上上上一个版本
移动或重命名文件目录或软连接
# git mv 命令用于移动或重命名一个文件、目录或软连接。
git mv [file] [newfile]
# 如果新文件名已经存在,但还是要重命名它,可以使用 -f 参数:
git mv -f [file] [newfile]
# 我们可以添加一个 README 文件(如果没有的话):
git add README
# 然后对其重命名:
git mv README README.md
删除文件
# 将文件从暂存区和工作区中删除:
git rm <file>
# 以下实例从暂存区和工作区中删除 abc.txt 文件:
git rm abc.txt
# 如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f。
# 强行从暂存区和工作区中删除修改后的 abc.txt 文件:
git rm -f runoob.txt
# 如果想把文件从暂存区域移除,但仍然希望保留在当前工作目录中,
# 换句话说,仅是从跟踪清单中删除,使用 --cached 选项即可:
git rm --cached <file>
# 以下实例从暂存区中删除 abc.txt 文件:
git rm --cached abc.txt
比较文件的不同
git diff
命令可比较文件在暂存区和工作区的差异。显示“已写入暂存区”和“已经被修改但尚未写入暂存区文件”的区别。
- 尚未缓存的改动:
git diff
- 查看已缓存的改动:
git diff --cached
- 查看已缓存的与未缓存的所有改动:
git diff HEAD
- 显示摘要而非整个 diff:
git diff --stat
# 显示暂存区和工作区的差异:
git diff [file]
# 显示暂存区和上一次提交(commit)的差异:
git diff --cached [file]
# 或
git diff --staged [file]
#显示两次提交之间的差异:
git diff [first-commit-id] [second-commit-id]
# 例,提交id通过 git log 命令获取
git diff 2362accf3e7be23e30 47f88153de2dc2f48a1
分支管理
# 列出在本地的分支
git branch
# 创建分支
git branch [branchname]
# 切换分支
git checkout [branchname]
# 创建新分支并立即切换到该分支
git checkout -b [branchname]
# 合并分支,可以将任何分支合并到当前分支中
# 除文件添加、移除的操作,Git 也会合并冲突
# 如下会进行选择将要合并到当前分支的其他分支
git merge
# 合并某分支到当前分支
git merge [branchname]
# 若有冲突时,合并会报错并给出提示
# 我们需要手动去修改有冲突的文件
# 当解决完冲突后,可以使用 git add 命令要告诉 Git 冲突已经解决
git add [有冲突的文件]
# 解决所有冲突
git add .
# 删除分支
git branch -d [branchname]
项目过大或网络过慢拉取超时
# 延长超时时间
git config --global http.postBuffer 600000
本文固定连接:https://code.zuifengyun.com/2019/11/3395.html,转载须征得作者授权。