欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Git2

程序员文章站 2024-01-24 20:37:52
...

1.查看分支 git branch

$git branch [-v/vv]

2.创建分支 git branch

$git branch 分支名

根据当前所在分支(master)创建一个名为test的分支,但是并不切换到新分支,仍然保持在master分支。

3.查看图形分支 gitk

$gitk

可以进入了图形界面,然后选择新建视图,选择remember和勾选全部,以后就可以直接用这个方式打开视图。同时我们也可以用gitk --all命令来打开图形界面,并显示所有分支。

4.切换分支 git checkout

$git chechout test

可以用git checkout -b test创建test分支并切换到test分支

头分离状态
一般HEAD就是指向某分支的最新提交,当使用git checkout 哈希值指令将HEAD指针指向的某个提交节点,HEAD不再指向某个分支的最新提交,此时称为头分离。用git status命令查看:HEAD detached at …

头分离状态的使用场景
当我们切换分离头的时候就有如下提示:
Note: checking out ‘cbd3348’.

You are in ‘detached HEAD’ state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

git checkout -b

HEAD is now at cbd3348 add 2 in m1
我们当前检出了‘cbd3348’这个提交,现在我们处于分离头的状态,git建议我们,在分离头的状态下,我们可以随便看看,可以按照我们的想法对当前目录中的文件进行一些实验性的修改,并且将这些实验性的修改创建成一些提交(其实这些提交会组成一条匿名分支),如果你最后后悔了,觉得实验不成功,修改后的结果并不是你想要的,那么我们可以在不影响任何其他分支和提交的前提下,丢弃这些实验性的提交(丢弃这条匿名分支),如果你觉得这些实验性的提交让你很满意,那么你就可以创建一个新的分支(其实是给这个匿名分支一个固定的名字),来永久性的保存这些信息。

Git2

其实分离头就是让我们可以随意的检出某个提交,然后基于这个提交创建一些新提交,这些新提交是偏实验性的,因为这些提交可能会被丢弃或删除。

如果要丢弃,直接检出到其他分支即可git checkout test

If you want to keep it by creating a new branch, this may be a good time
to do so with:

 git branch <new-branch-name> e90ae41

此时匿名分支还存在,用git reflog仍可查看到,也可用上面的命令可保存分支。但是应该不能长时间保存,或者是退出bash再打开就没了,或许是经过一段时间会被自动清理掉。

如果要保存git checkout -b newtest或者git branch newtest e90ae41

5.比较差异 git diff

1)比较工作区和暂存区全部

$git diff

2)比较工作区和暂存区某些文件,–后面可以跟随多个文件路径,每个文件路径用空格隔开

$git diff --文件名 文件名

3)查看工作区和本地库的差别,本地库可以是提交过的某个版本,分支名表示该分支最新版,HEAD表示当前分支的最新版。

$git diff 哈希码/分支名/HEAD

4)查看暂存区和本地库的差别

$git diff --cached

5)查看本地库两个提交之间从差别
说明:

  1. HEAD代表最新版,HEAD~代表倒退一个版,有多少~就代表倒退到多少版;
  2. 也可以用数字代表,HEAD~n代表倒退n个版。
  3. 这是git的一种简易写法,称为“相对提交名”。类似的还有版本回退时候的HEAD^写法。
$git diff HEAD~ HEAD
$git diff 367ds7 54sdk7
$git diff 367ds7 HEAD

两个提交之间除了用空格以外,还可以用“…”,使用这种写法时,可以省略任意一边的哈希值,省略的哈希值会被“HEAD”替代。

$git diff a63d5b2..367ds7
$git diff a63d5b2..HEAD
$git diff 367ds7..

6)获取完整哈希码命令git rev-parse

$git rev-parse HEAD~    /*通过相对提交名获取完整的哈希码*/
$git rev-parse a635db   /*通过哈希码的缩写获取完整的哈希码*/
$git rev-parse master   /*通过分支名获取完整的哈希码*/

6.版本回退 git reset
1)查看历史版本

$git reflog

2)回退暂存区全部

$git reset HEAD

3)回退暂存区某个文件

$git reset HEAD --文件名

4)回退暂存区和工作区全部

$git reset --hard HEAD

说明:
1.git reset xxgit reset --mixed xx等效,因为不写默认的就是--mixed
2.git reset --soft commitID指令只是将HEAD指针指向commitID对应的版本,也就是说当前分支的最新版本会变成commitID对应的版本,但是不会操作暂存区和工作区。

5)git checkout --文件/路径
此命令作用是撤销工作区对应暂存区的变更,分为两种情况:
1.撤销的文件已经提交到了暂存区,就是撤销到上一次暂存的状态;
2.撤销的文件没有提交到暂存区,就直接撤销工作区的新变更。

7.分支合并 git merge
1)git merge 分支名

#要讲某个分支代码合并到master分支,需要先切换到master分支
$git checkout master

#合并test分支到master分支
$git merge test
注:如果不带任何参数,此时会进入vim模式,提示输入新提交说明,可用默认说明,直接退出。

如果此时提示了fast-forward表示,master分支在和test分支分离后,master分支没有新的提交,所以HEAD指针直接移动到了test分支的最新提交。如果是正常合并分支,会在master分支最新提交版本基础上,再生成一个新提交(就是合并test代码后的新版本),并且HEAD指向这个新的提交。

2)不使用fast forward模式合并分支。

git merge --no-ff 分支名

3)只有可以使用ff模式合并时,才进行合并。

git merge --ff-only 分支名

4)不打开编辑器,使用默认注释合并。

git merge --no-edit 分支名

5)使用“-m”添加注释,不进入vim。不使用ff模式,因为如果使用ff模式,不会产生新提交,提交注释则会被跳过。

git merge 分支名 --no-ff -m "message"  

8.冲突解决
如果在执行合并时,出现了冲突,则会进入冲突解决模式。git bash的路径后面会显示“(分支名|MERGING)”,意味着合并并未结束。此时使用git status查看,可知有两个选择:
1.fix conflicts and run “git commit”
2.use “git merge --abort” to abort the merge
第一种解决冲突并提交,第二种放弃合并回到之前的状态。

9.其它场景
不在文件系统中进行删除(rm xx),重命名(mv xx xx)等操作,如果使用文件系统进行操作,git会识别为删除一个文件,加入一个新文件,此时需要进行相应的add操作。使用git命令则可一步搞定。

git rm xx
git mv xx xx
相关标签: Git

推荐阅读