git相关命令

git从远端dev创建本地dev分支,同时切换至本地dev分支:
git checkout -b dev origin/dev
git从本地已有的分支dev在拉取一个分支DEV:
先切换至本地的dev分支,然后执行:git branch DEV
如果是要在新建分支的同事切换至新建的分支:git checkout -b DEV

git cherry -v只能查看未传送提交的描述/说明
git log master ^origin/master则可以查看未传送提交的详细信息 【git log 本地branch ^远程分支】

git status //查看整体变更(详细到文件名)
【该命令对比的是工作区和暂存区的文件。例如如果本地新增了一个文件且该文件已被commit到暂存区,虽然还没有push,此时调用git status显示的是:
Your branch is ahead of ‘origin/master’ by 2 commits.
(use “git push” to publish your local commits)
nothing to commit, working tree clean】

git status的三种状态:
1、Untracked files

这种情况出现在新建几个文件(版本中不存在的),但是没有提交到暂存区的的时候

2、Changes not staged for commit

这种情况出现在版本已有文件遭到修改但是还没提交到暂存区的时候

3、Changes to be committed

这种情况出现在提交到暂存区之后的时候
4、nothing to commit, working tree clean

git diff //查看具体变更(详细到每行代码的增删)

git diff app/src/main/java/…/MainActivity.java //查看某个文件中的代码变更

git checkout //撤销所有还未add的修改

git log 查看历史提交记录
git reflog 查看历史命令

git branch 查看本地分支
git branch -r查看远程分支
git branch -a 查看本地和远程分支

https://blog.csdn.net/asheandwine/article/details/79003270 【stash】
git stash 将当前分支保存在git栈中
git stash list 查看“存储”的列表

git stash apply
git stash apply stash@{0} 0表示stash id
运行上述命令恢复后,stash内容并不删除,这时候再执行$git stash list命令,
id为0的储藏项目还会在列表中

$ git stash drop
$ git stash drop stash@{1}
运行上述命令删除指定stash项目,这时候再执行$ git stash list 命令,
id 为 1的储藏项目不会在列表中

$ git stash pop 命令恢复的同时把stash存储列表的内容也删了

http://www.cnblogs.com/chenlogin/p/6592228.html【fetch reset revert】
http://www.softwhy.com/article-8574-1.html【reset 】
https://www.jb51.net/article/104685.htm【reset】

git fetch origin branch1
这个操作是git pull origin branch1的第一步, 而与pull操作不同的的是:fetch并不会在本地创建新的branch。
设定当前分支的 FETCH_HEAD为远程服务器的branch1分支

//方法一
$ git fetch origin master //从远程的origin仓库的master分支下载代码到本地的origin master
$ git log -p master… origin/master//比较本地的仓库和远程参考的区别
$ git merge origin/master//把远程下载下来的代码合并到本地仓库,远程的和本地的合并

//方法二
$ git fetch origin master:temp //从远程的origin仓库的master分支下载到本地并新建一个分支temp
$ git diff temp//比较master分支和temp分支的不同
$ git merge temp//合并temp分支到master分支
$ git branch -d temp//删除temp

1、git checkout --index.html
修改了index.html文件,但是该文件还没有提交至暂存区的缓存方式

2、git reset
没有push,这种情况发生在你的本地代码仓库,可能你add ,commit 以后发现代码有点问题.

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交commit_id(79f673d631b08907496ce792f429e1f00da25b73),上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100。

HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard 79f673d631b08907496ce792f429e1f00da25b73。

穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

3、git revert
已经push,对于已经把代码push到线上仓库,你回退本地代码其实也想同时回退线上代码,回滚到某个指定的版本,线上,线下代码保持一致.你要用到下面的命令

git revert用一个新提交来消除一个历史提交所做的任何修改.

revert 之后你的本地代码会回滚到指定的历史版本,这时你再 git push 既可以把线上的代码更新.(这里不会像reset造成冲突的问题)

revert 使用,需要先找到你想回滚版本唯一的commit标识代码,可以用 git log 或者在adgit搭建的web环境历史提交记录里查看.

git revert c011eb3c20ba6fb38cc94fe5a8dda366a3990c61

两个命令的区别:
git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit看似达到的效果是一样的,其实完全不同.

第一:上面我们说的如果你已经push到线上代码库, reset 删除指定commit以后,你git push可能导致一大堆冲突(或git push -f强制推送).但是revert 并不会.

第二:如果在日后现有分支和历史分支需要合并的时候,reset 恢复部分的代码依然会出现在历史分支里.但是revert 方向提交的commit 并不会出现在历史分支里.

第三:reset 是在正常的commit历史中,删除了指定的commit,这时 HEAD 是向后移动了,而 revert 是在正常的commit历史中再commit一次,只不过是反向提交,他的 HEAD 是一直向前的.

reset命令的用法:例如:$ git reset ad91a7a8906d8c14051fea47d024059440925297 --soft 或者 $ git reset 120a893 a.txt --soft
1.git reset后面紧跟的参数是指定commit提交的标识。
2.标识可以是sha-1值或者HEAD、HEAD^或者分支名称等形式。
HEAD执行当前分支,当前分支所指向提交的前一个提交,表示当前分支所指向提交的前一个分支的前一个分支,以此类推;^过多自然不太方便,可以使用HEAD~2表示。

reset的三个参数的区别:mixed、soft和hard:

(1).–mixed:默认值,当重置分支所指向commit提交位置时,暂存区中的内容会被新指向的commit提交内容所替换,工作区内容不变。即此时执行git status的状态是Changes not staged for commit

(2).–soft:暂存区和工作区的内容都保持原样,不会被替换。即此时执行git status的状态是Changes to be committed

(3).–hard:暂存区和工作区的内容都会被新指向的commit提交内容所替换;git reset --hard只影响被跟踪的文件,如果工作区有新增的文件,并不会被影响。
git reset –hard <commit_id> 不推荐这种方式的,因为会让之前写的代码白写了。

(1)查看有多少次本地提交了,但是还没有push到版本库

git status ? ?
eg:Your branch is ahead of ‘origin/master’ by 1 commit.? (表示有一次commit未push)

(2)查看已经提交,但是未传送到远程代码库的提交描述/说明

git cherry -v

?
eg:?+ 27122d40164dbf08276d96960bde20a2059cdb8b 修改页面

(3)查看已经提交但是未传送到远程代码库的提交详情(可能不止一次)

git log master ^origin/master

(^与origin之间没有空格)?
eg: commit 5994e0e4d29e609befde1b2c509a70b19bb765f5 (HEAD -> developer)
Author: xxxxxx
Date: Wed Feb 20 16:11:08 2019 +0800

修改了......

Change-Id: Ie3896b603849b1e852fd3d547cae266038ada833

5.git查看远程仓库的地址
git remote -v

6.git 切换分支
如果本地没有该分支:
git checkout -b dev1 origin/dev1 拉取远程的dev1分支并将本地该分支命名为dev1,同时执行完该命令后处于本地dev1分支上。

如果本地有该分支:
git checkout master

7.git reflog可以查看当前工程所有的历史活动。

8.git stash的相关操作可参考
暂存本地修改
git stash
查看当前git栈信息
git stash list
拉取服务器代码
git pull
还原暂存内容
git stash pop stash@{0}
//如果有冲突,这里需要解决冲突
【git解决冲突时:
Updated upstream 和=====之间的内容就是pull下来的内容
====和stashed changes之间的内容就是本地修改的内容】
删除0编号的stash
git stash drop stash@{0}
清楚所有stash
git stash clear
具体可参考文章:https://www.cnblogs.com/baby123/p/6588378.html

9.查看远程仓库
git remote -v
输出如下:
$ git remote -v
origin git@gitlab.mfexcel.com:product-develop-express/commonlib/uiCoreAccessLib.git (fetch)
origin git@gitlab.mfexcel.com:product-develop-express/commonlib/uiCoreAccessLib.git (push)

10.git pull=git fetch + git merge
pull命令的用法
https://blog.csdn.net/liuchunming033/article/details/45367629

合并远端分支dev到当前分支:https://blog.csdn.net/now19930616/article/details/87861397
git fetch origin dev:dev2
git merge dev2
git push origin master
git branch -d dev2

11.常用git stash命令:
(1)git stash save “save message” : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。
(2)git stash list :查看stash了哪些存储
(3)git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{KaTeX parse error: Expected 'EOF', got '}' at position 4: num}̲,比如第二个 git stas…num} -p ,比如第二个:git stash show stash@{1} -p
(5)git stash apply :应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{KaTeX parse error: Expected 'EOF', got '}' at position 4: num}̲ , 比如第二个:git st…num} ,比如应用并删除第二个:git stash pop stash@{1}
(7)git stash drop stash@{KaTeX parse error: Expected 'EOF', got '}' at position 4: num}̲ :丢弃stash@{num}存储,从列表中删除这个存储
(8)git stash clear :删除所有缓存的stash

12.git删除分支 可参考https://www.jianshu.com/p/5068997164cb

(1).git删除本地分支:
删除本地分支:git branch -d Su-modify
若分支有修改还未合并,会提示你还没合并。
强行删除本地分支:git branch -D Su-modify

(2).git删除远端分支
第一个方法:
$ git push origin -d 分支名
或者
$ git push origin --delete 分支名
说明:git push origin --delete branch会删除远程分支和追踪分支,不需要单独删除追踪分支,但是如果通过网页对远程分支进行删除,追踪分支是不会被删除的

第二个方法:
git push [远程名] :[分支名] 冒号前面有一个空格
服务器上的分支没了。你最好特别留心这一页,因为你一定会用到那个命令,而且你很可能会忘掉它的语法。
有种方便记忆这条命令的方法:记住我们不久前见过的 git push [远程名] [本地分支]:[远程分支] 语法,如果省略 [本地分支],那就等于是在说“在这里提取空白然后把它变成[远程分支]”。
说明:这个命令不会删除跟踪分支

(3).git删除追踪分支
git branch -r -d origin/分支名
git branch --delete --remotes /
这个删除的是:可以删除追踪分支,该操作并没有真正删除远程分支,而是删除的本地分支和远程分支的关联关系,即追踪分支

13.git branch相关命令
git branch 查看当前本地的分支
git branch -v 查看当前分支的版本
git branch -r 查看远程分支
git branch -a 查看所有分支

14.如果本地没有某个分支,可以使用git checkout -b ccc origin/ccc 切换到ccc分支
如果本地已经有了某个分支,可以使用git checkout ccc 切换到ccc分支

15.本地git commit,然后git pull,pull后提示冲突,解决冲突后执行git log 会看到有两条信息需要push,
第一条是最开始自己的代码commit,第二条是merge信息,这是为什么呢?
因为 pull 的时候会把远程的代码 merge 到本地,如果你们俩改的文件互不影响,那么默认会走 fast-forward 合并,
不需要提交 merge 信息。如果你们改的文件有重叠,那么就可能会出现冲突,需要把文件合并起来,这时候会自动提
交一个 merge 信息,当然,有冲突的时候需要手动提交 merge 信息。你看到的 merge 就是这么来的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值