Git 常用命令归纳

初始化仓库

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
加载中...
加载中...