Git命令使用总结

git工作流程.png
pull和fetch merge命令.png
1.在GitHub上创建了一个新项目,如何将本地的一个工程上传上去
1) copy github项目地址
2) 在android studio中打开terminal命令行,执行命令将本项目所有代码添加
git add *
3)执行命令提交
git commit -m "描述信息" 
4)执行命令将本地代码和远端路径绑定
git remote add origin https://github.com/renzhenming/ArRemote.git
5)执行命令提交代码
git push origin master
2.创建分支
git branch [branch name]
3.从git地址clone
git clone git@github.com:FBing/design-patterns.git     git@github.com:FBing/design-patterns.git是项目地址
4.查看当前所在分支
git branch 比如当前在master分支,那么会显示*master
5.查看远程分支
git branch -r
6.查看所有分支,包括本地和远程
git branch -a
7.切换到另一分支
git checkout [branch name]
8.创建分支的同时切换到该分支上
git checkout -b [branch name]

这一命令的效果相当于以下两步操作:
git branch [branch name]
git checkout [branch name]
9.将新分支推送到github
git push origin [branch name]
10.删除本地分支
git branch -d [branch name]
11.删除github远程分支
git push origin :[branch name] (冒号需要紧挨着分支名,不能有空格)
12.git将代码提交到远程分支非主分支

一个仓库可以包含多个分支,有一个默认的主分支:master
若想提交代码至远程仓库的某个分支(非主分支)
先查看下本地分支以及远程分支:git branch -a

image

由本地分支(非主分支master)提交至远程分支,新建一个本地分支,并切换到此分支:Git branch-b temp
image

如果已有本地分支可直接切换:git checkout [name]
image

接下来三步走:

git add .
git commit -a -m 'xxxxx' //这里的-m后边是提交代码的描述信息

git push origin sunmaoyu //git push origin master的意思就是上传本地当前分支代码到master分支。git push是上传本地所有分支代码到远程对应的分支上。
image
image
image

· git add -A 提交所有变化
· git add -u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
· git add . 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件

13. git add .之后,取消add状态
git reset HEAD <file> file为完整路径
可以通过git status 获取到
14.修改代码后如何尚未add的时候取消所有的修改
git checkout -- <file>
file为完整路径
可以通过git status 获取到
15.合并分支代码
1、进入要合并的分支(如开发分支合并到master,则进入master目录)
git pull
2、查看所有分支是否都pull下来了
git branch -a
3、使用merge合并开发分支
git merge 分支名
4、查看合并之后的状态
git status 
5、有冲突的话,通过IDE解决冲突;(没有冲突的文件已经是commit状态了)
6、解决冲突之后,将冲突文件提交暂存区
git add 冲突文件
7、提交merge之后的结果
git commit 
如果不是使用git commit -m "备注" ,那么git会自动将合并的结果作为备注,提交本地仓库;
8、本地仓库代码提交远程仓库(没有冲突,merge之后直接push)
git push
git将分支合并到分支,将master合并到分支的操作步骤是一样的;
16.查看远程服务器地址
git remote -v
17.列出当前仓库的所有tag
git tag
18.创建tag,附注tag(v1.2是tag名称,-m后是注释信息)
git tag v1.2 -m "1.2版本的tag"
19.切换到某一个tag(例如:git checkout v1.2)
git checkout [tagname]
20.查看标签信息(可以看到-m后的注释信息)
git show v1.2
21.删除标签(打错标签需要修改的时候,需要先删除,再重新打新的)
git tag -d v1.2
22.提交本地tag到git服务器(通常的git push不会将标签对象提交到git服务器,需要进行显式的操作)
git push origin v1.2
23.提交所有本地标签到git服务器
git push origin --tags
24.在最后一次commit上 打标签
git tag -a "v0.2" c98c186ebb381005b495f6f1f2a65dc72195ad9d -m 'v0.2'
23.提交所有本地标签到git服务器
git push origin --tags
24.本地创建新分支后上传到服务器同时创建服务器新分支
1.git branch 新分支名                创建本地新分支
2.git checkout 新分支名            切换到这个新创建的分支上,此时,原来的代码都在这个新分支上
3.git push origin 新分支名:服务器分支名(新创建的原来不存在的)        这样就把代码上传到了服务器上一个新的分支中
25.类似操作git log 之后如何退出状态的方法

git log 进入了这种状态

。。。
Date:   Thu Aug 10 11:18:48 2017 +0800

    testfight 3105
:

苹果电脑按W Q键可退出

使用中发生的一些问题
本地创建了新分支,此时服务器上没有对应的分支,但是需要将这个分支提交到服务器
git push --set-upstream origin dev_location

这个命令会在服务器端创建分支dev_location并和本地做关联,然后就可以push了

Can't update: no tracked branch

服务器创建了新分支,本地创建并checkout之后更新代码,此时两端都有对应的分支,但是没有建立连接
提示如下,表明没有建立连接,所以只需要按提示输入命令

git branch --set-upstream v4.2 origin/v4.2

可能会提示

 The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-toBranch v4.2 set up to track remote branch v4.2 from origin.

不用管它,已经可以更新代码了

异常:Can't update: no tracked branch
        No tracked branch configured for branch v4.2.
To make 
        your branch track a remote branch call, for example,
git 
        branch --set-upstream v4.2 origin/v4.2
Git(some untracked working tree files would be overwritten by merge ,Please move or remove them before you can merge. Aborting)
发生这一问题时如果需要被move的文件是android studio自动生成的,这时不能直接在android studio里删除文件,因为你删除后会再次生成,pull或者update的结果是仍有这一错误解决的办法是关闭android studio 进入需要被删除的文件夹中将文件删掉,然后直接在命令行中git pull ,这样就
可以把文件pull下来注意在pull之前不可以打开android studio,防止再次自动生成
26.撤销commit soft reset 和 hard reset

commit到本地后,如过需要撤销这次commit可以这样执行
先使用git log 查看 commit日志

    commit 422bc088a7d6c5429f1d0760d008d86c505f4abe  
    Author: zhyq0826 <zhyq0826@gmail.com>  
    Date:   Tue Sep 4 18:19:23 2012 +0800  
      
        删除最近搜索数目限制  
      
    commit 8da0fd772c3acabd6e21e85287bdcfcfe8e74c85  
    Merge: 461ac36 0283074  
    Author: zhyq0826 <zhyq0826@gmail.com>  
    Date:   Tue Sep 4 18:16:09 2012 +0800  

找到需要回退的那次commit的 哈希值,

git reset --hard commit_id 

这样操作的结果是提交到本地的代码会消失,同样工程中的代码也会撤销,相当于完全回到了上一个节点
如果仅仅想去掉本地提交而不影响工程中的代码,可以这样

git reset --soft commit_id 

两者的区别如下
git reset –soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
git reset –hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容

27.撤销push到远端的代码

在使用git时,push到远端后发现commit了多余的文件,或者希望能够回退到以前的版本。
先在本地回退到相应的版本:

git reset --hard <版本号>
// 注意使用 --hard 参数会抛弃当前工作区的修改
// 使用 --soft 参数的话会回退到之前的版本,但是保留当前工作区的修改,可以重新提交

如果此时使用命令:

git push origin <分支名>

会提示本地的版本落后于远端的版本


image

为了覆盖掉远端的版本信息,使远端的仓库也回退到相应的版本,需要加上参数--force

git push origin <分支名> --force
28.命令合并分支代码

合并步骤:
1、进入要合并的分支(如开发分支合并到master,则进入master目录)
git pull
2、查看所有分支是否都pull下来了
git branch -a
3、使用merge合并开发分支
git merge 分支名
4、查看合并之后的状态
git status
5、有冲突的话,通过IDE解决冲突;(没有冲突的文件已经是commit状态了)
6、解决冲突之后,将冲突文件提交暂存区
git add 冲突文件
7、提交merge之后的结果
git commit
如果不是使用git commit -m "备注" ,那么git会自动将合并的结果作为备注,提交本地仓库;
8、本地仓库代码提交远程仓库(没有冲突,merge之后直接push)
git push
git将分支合并到分支,将master合并到分支的操作步骤是一样的;

29. Android Studio 项目取消 GitHub关联

有时候和github关联的时候,我们执行了git remote add origin http://xxxx将本地仓库和远程地址关联了起来,但是发现这个地址不是我们想要的地址,这个时候再重新git remote add origin http://yyyy,会提示

fatal: remote origin already exists.

正确的操作步骤应该是
1、先删除远程 Git 仓库
git remote rm origin
2、再添加远程 Git 仓库
git remote add origin http://xxxx

30.git stash命令

本地做了修改之后,如果又突然需要update代码,但是由于本地的修改并不完整,你还不想commit,这时可以使用stash命令,这个命令会先将你的修改保存,执行之后本地代码会恢复到上一次commit的状态

git stash

然后update服务器代码,更新完成之后执行再执行stash恢复刚刚保存的代码

git stash pop

此时你会发现,原本你在本地修改的代码已经又恢复了,并且也已经完成了和服务器的同步

31.git push origin与git push -u origin master的区别

$ git push origin

上面命令表示,将当前分支推送到origin主机的对应分支。 

如果当前分支只有一个追踪分支,那么主机名都可以省略。 

$ git push 如果当前分支与多个主机存在追踪关系,那么这个时候-u选项
会指定一个默认主机,这样后面就可以不加任何参数使用git push。

$ git push -u origin master 上面命令将本地的master分支推送到origin主
机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。

 不带任何参数的git push,默认只推送当前分支,这叫做simple方式。此
外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。
Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方
式。

git push origin master

origin指定了你要push到哪个remote

master其实是一个“refspec”,正常的“refspec”的形式为”+<src>:<dst>”,冒号前表示local branch的名字,冒号后表示remote repository下 branch的名字。注意,如果你省略了<dst>,git就认为你想push到remote repository下和local branch相同名字的branch。听起来有点拗口,再解释下,push是怎么个push法,就是把本地branch指向的commit push到remote repository下的branch,比如

$git push origin master:master (在local repository中找到名字为master的branch,使用它去更新remote repository下名字为master的branch,如果remote repository下不存在名字是master的branch,那么新建一个)

$git push origin master (省略了<dst>,等价于“git push origin master:master”)

$git push origin master:refs/for/mybranch (在local repository中找到名字为master的branch,用他去更新remote repository下面名字为mybranch的branch)

$git push origin HEAD:refs/for/mybranch (HEAD指向当前工作的branch,master不一定指向当前工作的branch,所以我觉得用HEAD还比master好些)

$git push origin :mybranch (再origin repository里面查找mybranch,删除它。用一个空的去更新它,就相当于删除了)

如何解决二进制文件的冲突(如aar)

对于二进制文件的冲突,你肯定不想通过编辑二进制文件来解决冲突,那是不可能完成的事情。
你要做的就是:要么选择对方的修改,要么选择自己的修改。
你可以用git checkout的--theirs或--ours选项。

git pull
git checkout --theirs YOUR_BINARY_FILE
// git checkout --ours YOUR_BINARY_FILE
git add YOUR_BINARY_FILE
git commit -m 'merged with the remote repos.'
git push

stash使用

(1)git stash save "save message" : 执行存储时,添加备注,方便查找,只有git stash 也可以的,但查找时不方便识别。
(2)git stash list :查看stash了哪些存储
(3)git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}

(4)git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p

(5)git stash apply :应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}

(6)git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}

(7)git stash drop stash@{num} :丢弃stash@{num}存储,从列表中删除这个存储
(8)git stash clear :删除所有缓存的stash

git本地创建新分支并推送到远程

(1) 本地创建并切换分支**
git checkout -b dev
(2) 将dev分支推送到远程**
git push origin dev:dev //推送本地的dev(冒号前面的)分支到远程origin的dev(冒号后面的)分支(没有会自动创建)
(3) 建立本地到上游(远端)仓的链接,这样代码才能提交上去**
git branch --set-upstream-to=origin/dev
(4) 取消对master分支的跟踪**
git branch --unset-upstream master

git blame查看某文件制定行的修改人

//显示WkFeedChainMdaReport中第948 到第 962行代码的修改人和提交时间
git blame -L 948,962  xxx/xxx/WkFeedChainMdaReport.java

如何取消git pull后自动merge到本分支的代码

git pull用的很多,有时候不小心pull了一个分支,然后自动就merge到当前分支了,于是很可能就产生了冲突,那么怎么把这次merge取消?(加入当前在分支A,输入命令git pull origin B,把B pull了下来,和当前Amerge后产生冲突)

首先:

git reflog

80aaa77c3 (HEAD -> renzm_86084, origin/renzm_86084) HEAD@{0}: reset: moving to HEAD
80aaa77c3 (HEAD -> renzm_86084, origin/renzm_86084) HEAD@{1}: commit: 添加默认策略配置
a13e41d6b HEAD@{2}: checkout: moving from t2m_86084_20210312104030 to renzm_86084
......

然后

git reset --hard HEAD@{n},(n是你要回退到的引用位置)回退

如:
git reset --hard HEAD@{1},回退到HEAD@{1}: commit: 添加默认策略配置这个位置
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容