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
接下来三步走:
git add .
git commit -a -m 'xxxxx' //这里的-m后边是提交代码的描述信息
· 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 <分支名>
会提示本地的版本落后于远端的版本
为了覆盖掉远端的版本信息,使远端的仓库也回退到相应的版本,需要加上参数--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}存储,从列表中删除这个存储
(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: 添加默认策略配置这个位置