5、Git 操作
5.1 隐藏(Stash)
在 Git 中,隐藏操作将能够修改跟踪文件,阶段更改,并将其保存在一系列未完成的更改中,并可以随时重新应用。
当更改了文件的内容后,通过 git status
对跟踪文件进行检查,现在,要切换分支以进行客户升级,但不想提交一直在做的工作; 那么可以把当前工作的改变隐藏起来。 要将一个新的存根推到堆栈上,运行 git stash
命令:
$ git stash
现在,可以安全地切换分支并在其他地方工作。通过使用git stash list
命令来查看已存在更改的列表:
$ git stash list
之后想重新开始新的文件编写,查找上次没有修改完的文件,只需执行 git stash pop
命令即可从堆栈中删除更改并将其放置在当前工作目录中:
$ git stash pop
5.2 移动、重命名(mv)
5.2.1 移动操作
移动操作将目录或文件从一个位置移动到另一个位置。例如,我们想要将源代码移动到src目录中。修改后的目录结构将显示如下:
$ mkdir gitmv
$ git mv noadd.txt gitmv/
更改之后,为了使这些更改永久性,必须将修改的目录结构推送到远程存储库,在执行git pull
操作之后,目录结构将被更新。
$ git pull
5.2.2 重命名操作
$ git mv noadd.txt noadd2.txt
R
: 表示文件已被重命名;
对于提交操作,需要使用 -a
标志,这使 git commit
自动检测修改的文件。
5.3 修正(checkout)
当我们不想要修改已经提交了的文件的内容时,需要通过撤销修改,可以使用 git checkout
命令。可以使用此命令来还原文件的内容。
$ git checkout remind.md
5.3.1 删除分段区域的更改
当执行添加操作时,文件将从本地存储库移动到暂存区域。 如果用户意外修改文件并将其添加到暂存区域,则可以使用 git checkout
命令恢复其更改。
在Git中,有一个 HEAD
指针总是指向最新的提交。 如果要从分段区域撤消更改,则可以使用 git checkout
命令,但是使用 checkout
命令,必须提供一个附加参数,即 HEAD
指针。 附加的提交指针参数指示 git checkout
命令重置工作树,并删除分段更改。
$ git checkout head -- remind.md
5.3.2 复位移动头指针
经过少量更改后,可以决定删除这些更改。 git reset
命令用于复位或恢复更改。 我们可以执行三种不同类型的复位操作。
每个分支都有一个 HEAD
指针,它指向最新的提交。如果用 --soft
选项后跟提交 ID 的 Git reset
命令,那么它将仅重置 HEAD
指针而不会破坏任何东西。
.git/refs/heads/master
文件存储 HEAD
指针的提交 ID。 可使用 git log -1
命令验证。
$ cat .git/refs/heads/test
-
--mixed
:将从尚未提交的暂存区域还原这些更改。它仅从暂存区域恢复更改。对文件的工作副本进行的实际更改不受影响。
默认 Git 复位等效于执行 git reset - mixed
。
-
--hard
:将清除分段区域; 它会将 HEAD 指针重置为特定提交 ID 的最新提交,并删除本地文件更改。
现在,利用 git log
命令获取对应的头指针 ID 所指向的暂存区域,通过重置 HEAD 与 --hard
选项,将从分段区域还原文件,并删除对文件所做的任何本地更改。
$ git reset --hard 5d8bfbc12278b840acf7e26e62f6ebf166f6ffc4
5.4 标签(tag)
假设项目中存在两个成员,均需要标记项目内容,以便更容易访问。
5.4.1 创建标签
使用 git tag
命令来标记当前 HEAD
指针。在创建标签时需要提供 -a
选项的标签名称,并提供带 -m
选项的标签消息。
$ git tag -a 'first_tag' -m 'git tag -a name -m message'
如果要标记特定提交,则使用相应的COMMIT ID
而不是HEAD
指针:
$ git push origin tag first_tag
5.4.2 查看标签
可以使用带有 -l
选项的 git tag
命令查看所有可用的标签:
$ git tag -l
使用 git show tagname
命令后跟其标签名来查看有关标签的更多详细信息:
$ git show first_tag
5.4.3 删除标签
使用命令 git tag -d
从本地以及远程存储库中删除标签:
补丁是一个文本文件,其内容类似于查看修改命令 git diff
,但与代码一样,它也有关于提交的元数据; 例如提交ID,日期,提交消息等。我们可以从提交创建一个补丁,而其他人可以将它们应用到他们的存储库。
使用 git format-patch
命令创建最新提交的修补程序。 如果要为特定提交创建修补程序,请在 format-patch
命令后面指定 COMMIT_ID
。
$ git format-patch -1
# 指定 commit Id
$ git format-patch ba47cca229eefb8aaba9c7393ed94fa319778fac
上述命令在当前工作目录中创建了 .patch
文件。其他工作人员可以使用这个补丁来修改他的文件。git 分别提供两个命令来应用补丁:
5.6 分支(branch)
分支操作允许创建另一路线 / 方向上开发,通过使用这个操作将开发过程分为两个不同的方向。
5.6.1 创建分支
使用 git branch <branch name>
命令创建一个分支,可以从现有分支上创建,也可以使用特定的标签或提交作为起点创建。如果没有任何特定的提交 ID ,将会以 HEAD
作为起点提交分支。
$ git branch newbranch
创建了新分支 "newbranch" ,使用 git branch
列出可用的分支,Git 在当前签出分支之前显示一个星号。创建分支的操作如下:
5.6.2 切换分支
使用 git checkout <branch name>
命令在分支之间切换:
$ git checkout new_branch
5.6.3 创建并切换分支
Git 为 checkout
命令提供 -b
选项; 此操作将创建一个新的分支,并立即切换到新分支。
$ git checkout -b test_branch
5.6.4 删除分支
通过向 git branch
命令提供 -D
选项来删除分支。在删除现有分支时需切换到其他分支。
$ git branch -D test_branch
5.6.5 重命名分支
假设需要在项目中添加对宽字符的支持,并且已经创建了一个新的分支,但分支名称需要重新命名。那么可通过使用 -m
选项后跟旧的分支名称和新的分支名称来更改/重新命名分支名称。
$ git branch -m new_branch wchar_support
5.6.6 合并分支
当进行文件提交到新分支后,将显示如下:
通过查看提交信息,假设工作人员需要在 master 分支中有相同的功能,不用重新执行代码编写同样的代码,而是通过将分支与主分支合并来执行代码的合并。如下:
$ git merge origin/wchar_support
通过合并操作后,显示如下:
5.7 不同平台换行符问题
GNU / Linux 和 Mac OS 使用换行( LF
)或新行作为行结束字符,而 Windows 使用换行和回车( LFCR
)组合来表示行结束字符。
对于 Windows 系统,可以将 Git 客户端配置为将行结束符转换为 CRLF
结束符,并在提交时将其转换回 LF
格式,如下:
$ git config --global core.autocrlf true
对于 GNU / Linux 或 Mac OS 系统,我们可以配置 Git 客户端,以便在执行结帐操作时将线结束从 CRLF 转换为 LF ,如下:
$ git config --global core.autocrlf input
5.8 远程操作