你要说一篇git就能学会,我真的不信。那我们就按照标号顺序进行命令罗列。
bash git add [file1] [file2] ...
git add [dir]
git add .
git add -u
提交被修改和被删除文件git commit -a -m '提交信息'
,-m参数是输入提交信息的,-a 参数就是可以把还没有执行add命令的修改一起提交git commit --amend
发现我写的提交信息不合规范,就可以修改上一次的提交信息每次使用git commit 命令我们都会在本地版本库生成一个40位的哈希值,这个哈希值也叫commit-id,commit-id在版本回退的时候是非常有用的,它相当于一个快照,可以在未来的任何时候通过与git reset的组合命令回到这里.
在进入实例之前,我们先介绍几个命令
git status -s 或 git status --short 命令 以精简的方式显示文件状态。
git status 输出的命令很详细,但有些繁琐。
新添加的未跟踪文件前面有 ?? 标记,
新添加到暂存区中的文件前面有 A 标记,
修改过的文件前面有 M标记。
M 有两个可以出现的位置,出现在右边的 M 表示该文件被修改了但是还没放入暂存区,出现在靠左边的 M 表示该文件被修改了并放入了暂存区。
实例1 正常逻辑
创建文件及文件夹,并初始化仓库,进行查看
$ mkdir git_status
$ cd git_status/
:~/git_status$ touch readme.md
:~/git_status$ touch README
:~/git_status$ ls
README readme.md
:~/git_status$ git init
已初始化空的 Git 仓库于 /home/ts/git_status/.git/
:~/git_status$ git status
位于分支 master
尚无提交
未跟踪的文件:(使用 "git add <文件>..." 以包含要提交的内容)READMEreadme.md
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
将文件添加到暂存库,查看并提交,查看改动与第一次提交
:~/git_status$ git add
没有指定文件,也没有文件被添加。
也许您想要执行 'git add .'?
:~/git_status$ git add .
:~/git_status$ git status
位于分支 master
尚无提交要提交的变更:(使用 "git rm --cached <文件>..." 以取消暂存)新文件: README新文件: readme.md
:~/git_status$ git commit -m "the first time commit"
[master (根提交) a32a080] the first time commit2 files changed, 0 insertions(+), 0 deletions(-)create mode 100644 READMEcreate mode 100644 readme.md
:~/git_status$ git status
位于分支 master
无文件要提交,干净的工作区
ts@ts-OptiPlex-7070:~/git_status$ git log
commit a32a08082bf48e3e8a0ef64c45d268a80f7119f2 (HEAD -> master)
Author: huangrui0922 <huangrui0922@thundersoft>
Date: Tue Oct 27 16:32:08 2020 +0800the first time commit
更改README ,查看改动,并再次提交
:~/git_status$ vim README
:~/git_status$ git status
位于分支 master
尚未暂存以备提交的变更:(使用 "git add <文件>..." 更新要提交的内容)(使用 "git checkout -- <文件>..." 丢弃工作区的改动)修改: README修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
:~/git_status$ git add README
:~/git_status$ git status
位于分支 master
要提交的变更:(使用 "git reset HEAD <文件>..." 以取消暂存)修改: README:~/git_status$ git commit -m "second commit"
[master e43aa26] second commit1 file changed, 1 insertion(+)
查看改动
:~/git_status$ git status
位于分支 master
无文件要提交,干净的工作区
ts@ts-OptiPlex-7070:~/git_status$ git log
commit e43aa262233715a954d145ce238b17cd23556ab5 (HEAD -> master)
Author: huangrui0922 <huangrui0922@thundersoft>
Date: Tue Oct 27 16:35:36 2020 +0800second commitcommit a32a08082bf48e3e8a0ef64c45d268a80f7119f2
Author: huangrui0922 <huangrui0922@thundersoft>
Date: Tue Oct 27 16:32:08 2020 +0800the first time commit
ts@ts-OptiPlex-7070:~/git_status$
实例2 精简逻辑
git status命令用于显示工作目录和暂存区的状态。 使用此命令能看到那些修改被暂存到了, 哪些没有, 哪些文件没有被Git tracked到。
我们添加两个文件:
$ touch README # 创建文件
$ touch hello.php # 创建文件
$ git status -s
?? README
?? hello.php
$
接下来我们执行 git add 命令来添加文件:
$ git add README hello.php
现在我们再执行 git status,就可以看到这两个文件已经加上去了。
$ git status -s
A README
A hello.php
新项目中,我们可以使用 git add . 命令来添加当前项目的所有文件。
现在修改 README 文件:
$ vim README
在 README 添加以下内容:# Runoob Git 测试,保存退出。
再执行一下 git status:
$ git status -s
AM README
A hello.php
AM 状态的意思是这个文件在我们将它添加到缓存之后又有改动。改动后我们再执行 git add . 命令将其添加到缓存中:
$ git add .
$ git status -s
A README
A hello.php
文件修改后,我们一般都需要进行 git add 操作,从而保存历史版本。
checkout命令用法如下:
1.
git checkout [-q] [<commit>] [--] <paths> ...
命令举例(此命令用来放弃掉所有还没有加入到缓存区的修改)
git checkout -- filepathname
放弃单个文件修改,注意不要忘记中间的"–",不写就成了检出分支了git checkout .
// 放弃所有的文件修改但是此命令不会删除掉刚新建的文件。那要是已经添加到缓存的修改呢?
命令举例(相当于撤销 git add 命令所在的工作)
git checkout HEAD filepathname
//将分支HEAD的filepathname撤销
也可以使用 git reset HEAD filepathname
将分支HEAD的filepathname撤销
如果已经用 git commit 提交了代码(相当于撤销 git commit 命令所在的工作):
git reset --hard HEAD^
来回退到上一次commit的状态。 此命令可以用来回退到任意版本:git reset --hard commitid
非常重要:如果省略commit,则会用暂存区的文件覆盖工作区中的文件,否则用指定提交中的文件覆盖暂存区和工作区中的对应文件
2.
git checkout [<branch>]
git checkout HEAD^
切换到HEAD的上一级commitgit checkout
后面不跟任何参数,则就是对工作区进行检查非常重要:git checkout HEAD
是会改变HEAD头指针的。而且只有当HEAD切换到某个分支的时候才可以对提交进行跟踪,否则就会进入“分离头指针”的状态。
3.
git checkout [-m] [ [-b | -- orphan ] <new_branch>] [start_point]
git checkout --detach <branch>
切换到分支的游离状态,默认以该分支下的最后一次提交IDgit checkout -B <branch>
强制新建分支git checkout -b <branch>
创建分支git commit
后,它才算得上真正的分支。git checkout --merge <branch>
适用于在切换分支的时候,将当前分支修改的内容一起打包带走,同步到切换的分支下,但是有两个需要注意的,一:如果当前分支和切换分支间的内容不同的话,容易造成冲突。二:切换到新分支后,当前分支修改过的内容就丢失了。git checkout -p <branch>
这个命令可以用来打补丁。这个命令主要用来比较两个分支间的差异内容,并提供交互式的界面来选择进一步的操作。这个命令不仅可以比较两个分支间的差异,还可以比较单个文件的差异格式:
git push <远程主机名> <本地分支名> <远程分支名>
git push origin master:refs/for/master
将本地的master分支推送到远程主机origin上的:master分支, origin :程主机名这个命令的差异无非就是哥哥“名”的省略带来的含义
git push origin master
远程分支被省略,则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,就会被新建git push origin :refs/for/master
省略本地分支名,表示删除指定的远程分支,这等同于推送一个空的本地分支到远程分支,等同于 git push origin --delete master
git push origin
当前分支与远程分支存在追踪关系,则本地分和远程分支都可以省略,将当前分支推送到origin主机的对应分支git push
如果当前分支只有一个远程分支,那么主机名都可以省略,形如 git push,可以使用git branch -r ,查看远程的分支名refs/for
的意义在于我们提交代码到服务器之后是需要经过code review 之后才能进行merge的,而refs/heads 不需要1.git clone
2.git fetch
$ git fetch <远程主机名> 将某个远程主机的更新,全部取回本地,git fetch命令通常用来查看其他人的进程,因为它取回的代码对你本地的开发代码没有影响
$ git fetch <远程主机名> <分支名> 取回特定分支的更新,取回的更新,在本地主机上要用"远程主机名/分支名"的形式读取。如origin主机的master,要用origin/master读取
默认模式下 相当于 git fetch + git merge FETCH_HEAD 命令,更准确的说,git pull 相当于:
先执行git fetch + 指定参数,然后执行git merge 命令将检索到的分支合并到当前分支。
git pull过程:
git fetch origin master 先拉取,让本地的origin/master先更新到最新
A---B---C master on origin
/
D—E---F—G master
git merge origin/master
A---B-----C origin/master/ D---E---F---G--- H master
本文发布于:2024-01-28 04:37:06,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063878324827.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |