ForgetSou | Blog

❤ 武统台湾 刻不容缓 ❤

0%

git常用命令

一. 开始工作区

1. clone 克隆远程仓库到本地

git clone https://github.com/ForgetSou/myBlog.git

git clone -b branch_1.0.0 https://github.com/ForgetSou/myBlog.git

2. init 初始化仓库

git init

二.处理变化

1. git add

添加文件到暂存区

1.1 添加一个或多个文件

git add [file1] [file2] ...

1.2 添加指定目录(包括子目录)到暂存区

git add [dir]

1.3 添加当前所在目录所有文件到暂存区

git add .

2. git status

查看仓库状态,显示有变更的文件

git status -s // 获取间断的输出结果
git status On branch master // 查看branch状态

3. git diff

git diff 比较文件的不同,即暂存区和工作区的差异

git diff 命令显示已写入暂存区和已经被修改但尚未写入暂存区文件对区别。

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-branch]...[second-branch]

4. commit

提交暂存区到本地仓库中:

git commit -m [message]

[message] 可以是一些备注信息。

提交暂存区的指定文件到仓库区:

$ git commit [file1] [file2] ... -m [message]

-a 参数设置修改文件后不需要执行 git add 命令,直接来提交

$ git commit -a

设置提交代码时的用户信息

开始前我们需要先设置提交的用户信息,包括用户名和邮箱:

$ git config --global user.name 'runoob'
$ git config --global user.email test@runoob.com

如果去掉 –global 参数只对当前仓库有效。

提交修改

接下来我们就可以对 hello.php 的所有改动从暂存区内容添加到本地仓库中。

以下实例,我们使用 -m 选项以在命令行中提供提交注释。

$ git add hello.php
$ git status -s
A README
A hello.php
$ git commit -m '第一次版本提交'
[master (root-commit) d32cf1f] 第一次版本提交
2 files changed, 4 insertions(+)
create mode 100644 README
create mode 100644 hello.php

现在我们已经记录了快照。如果我们再执行 git status:

$ git status
# On branch master
nothing to commit (working directory clean)

以上输出说明我们在最近一次提交之后,没有做任何改动,是一个 “working directory clean”,翻译过来就是干净的工作目录。

如果你没有设置 -m 选项,Git 会尝试为你打开一个编辑器以填写提交信息。 如果 Git 在你对它的配置中找不到相关信息,默认会打开 vim。屏幕会像这样:

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: hello.php
#
~
~
".git/COMMIT_EDITMSG" 9L, 257C

如果你觉得 git add 提交缓存的流程太过繁琐,Git 也允许你用 -a 选项跳过这一步。命令格式如下:

git commit -a

我们先修改 hello.php 文件为以下内容:

<?php
echo '菜鸟教程:www.runoob.com';
echo '菜鸟教程:www.runoob.com';
?>

再执行以下命令:

$ git commit -am '修改 hello.php 文件'
[master 71ee2cb] 修改 hello.php 文件
1 file changed, 1 insertion(+)

5. git reset

git reset 命令用于回退版本,可以指定退回某一次提交的版本。

git reset 命令语法格式如下:

git reset [--soft | --mixed | --hard] [HEAD]

–mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。

git reset  [HEAD] 

实例:

$ git reset HEAD^            # 回退所有内容到上一个版本  
$ git reset HEAD^ hello.php # 回退 hello.php 文件的版本到上一个版本
$ git reset 052e # 回退到指定版本

–soft 参数用于回退到某个版本:

git reset --soft HEAD

实例:

$ git reset –soft HEAD~3 # 回退上上上一个版本

–hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交:

git reset --hard HEAD

实例:

$ git reset –hard HEAD~3  # 回退上上上一个版本  
$ git reset –hard bae128 # 回退到某个版本回退点之前的所有信息。
$ git reset --hard origin/master # 将本地的状态回退到和远程的一样

注意:谨慎使用 –hard 参数,它会删除回退点之前的所有信息。

HEAD 说明:

  • HEAD 表示当前版本

  • HEAD^ 上一个版本

  • HEAD^^ 上上一个版本

  • HEAD^^^ 上上上一个版本

  • 以此类推…

可以使用 ~数字表示

  • HEAD~0 表示当前版本

  • HEAD~1 上一个版本

  • HEAD^2 上上一个版本

  • HEAD^3 上上上一个版本

  • 以此类推…

git reset HEAD

git reset HEAD 命令用于取消已缓存的内容。

我们先改动文件 README 文件,内容如下:

Git 测试

hello.php 文件修改为:

<?php
echo '百度:www.baidu.com';
?>

现在两个文件修改后,都提交到了缓存区,我们现在要取消其中一个的缓存,操作如下:

$ git status -s
M README
M hello.php
$ git add .
$ git status -s
M README
M hello.php
$ git reset HEAD hello.php
Unstaged changes after reset:
M hello.php
$ git status -s
M README
M hello.php

现在你执行 git commit,只会将 README 文件的改动提交,而 hello.php 是没有的。

$ git commit -m '修改'
[master f50cfda] 修改
1 file changed, 1 insertion(+)
$ git status -s
M hello.php

可以看到 hello.php 文件的修改并未提交。

这时我们可以使用以下命令将 hello.php 的修改提交:

$ git commit -am '修改 hello.php 文件'
[master 760f74d] 修改 hello.php 文件
1 file changed, 1 insertion(+)
$ git status
On branch master
nothing to commit, working directory clean

简而言之,执行 git reset HEAD 以取消之前 git add 添加,但不希望包含在下一提交快照中的缓存。

6. git rm

git rm 命令用于删除文件。

如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 Changes not staged for commit 的提示。

git rm 删除文件有以下几种形式:

1、将文件从暂存区和工作区中删除:

git rm <file>

以下实例从暂存区和工作区中删除 runoob.txt 文件:

git rm runoob.txt 

如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f

强行从暂存区和工作区中删除修改后的 runoob.txt 文件:

git rm -f runoob.txt 

如果想把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 –cached 选项即可:

git rm --cached <file>

以下实例从暂存区中删除 runoob.txt 文件:

git rm --cached runoob.txt

实例

删除 hello.php 文件:

$ git rm hello.php 
rm 'hello.php'
$ ls
README

文件从暂存区域移除,但工作区保留:

$ git rm --cached README 
rm 'README'
$ ls
README

可以递归删除,即如果后面跟的是一个目录做为参数,则会递归删除整个目录中的所有子目录和文件:

git rm –r * 

进入某个目录中,执行此语句,会删除该目录下的所有文件和子目录。

7. git mv

git mv 命令用于移动或重命名一个文件、目录或软连接。

git mv [file] [newfile]

如果新但文件名已经存在,但还是要重命名它,可以使用 -f 参数:

git mv -f [file] [newfile]

我们可以添加一个 README 文件(如果没有但话):

$ git add README 

然后对其重命名:

$ git mv README  README.md
$ ls
README.md

三. 提交日志

Git 提交历史一般常用两个命令:

  • git log - 查看历史提交记录。
  • git blame - 以列表形式查看指定文件的历史修改记录。

1. git log

在使用 Git 提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,我们可以使用 git log 命令查看。

我们可以用 –oneline 选项来查看历史记录的简洁的版本。

git log --oneline

我们还可以用 –graph 选项,查看历史中什么时候出现了分支、合并。

你也可以用 –reverse 参数来逆向显示所有日志。

git log --reverse --oneline

如果只想查找指定用户的提交日志可以使用命令:git log –author

git log --author=Linus --oneline

如果你要指定日期,可以执行几个选项:–since 和 –before,但是你也可以用 –until 和 –after。–no-merges 选项以隐藏合并提交。

git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges

2. git blame

如果要查看指定文件的修改记录可以使用 git blame 命令,格式如下:

git blame <file>

git blame 命令是以列表形式显示修改记录

git blame README

四. 远程操作

1. git remote

2. git fetch

3. git pull

4. git push

-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!

欢迎关注我的其它发布渠道