Git使用总结

写在前面

配置:

$ git config --global user.name "xxxxxx" 

$ git config --global user.email "xxxxx@exmple.com"

别名:

$ git config --global alias.st status
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch

以后提交就可以简写成:

$ git st

$ git ci -m "xxxxxx"

生成SSH pubkey:

$ ssh-keygen -t rsa -C "abc@qq.com"

一、回退操作

1、第一类,工作区修改(增加/删除)了受控的文件,想要退回到之前的操作,工作区回到修改之前的状态,暂存区和库区不受影响。(此操作比较危险,会清除工作区未添加到暂存区的改动

$git checkout -- filename       回退某个指定的文件

$git checkout -- .                    回退当前目录所有修改

$git checkout -f                      回退当前本地分支下所有修改

2、第二类,工作区修改(增加/删除)了受控文件,并执行了git add操作,想要取消add动作,暂存区回到add之前的状态,工作区和库区不受影响。

$git reset HEAD filename       回退某个指定的文件

$git reset HEAD .                    回退所有修改

#第二类补充,工作区修改(增加/删除)了受控文件,并执行了git add操作,想要取消add动作,暂存区回到add之前的状态,并抛弃工作区的修改。(此操作及其危险,会清除工作区和暂存区未提交的改动

$git checkout HEAD filename         回退并删除某个文件的修改

$git checkout HEAD .                      回退所有修改

3、第三类,工作区修改(增加/删除)了受控文件,并执行了git add和git commit操作,想要取消commit操作重新commit一次,库区回到commit之前的状态,工作区和暂存区不受影响。

$git reset --soft HEAD^

4、第四类,工作区修改(增加/删除)了受控文件,并执行了git add和git commit操作,想要取消add和commit操作,保留工作区的修改,暂存区和库区回到之前的状态。

$git reset --mixed HEAD^

5、第五类,工作区修改(增加/删除)了受控文件,并执行了git add和git commit操作,想要取消add和commit操作,抛弃工作区的修改。

$git reset --hard HEAD^

#如果发现第五类操作有误,想要回到之前状态

$git reflog

c2ee736 HEAD@{0}: reset: moving to HEAD^

$git reset --hard HEAD@{0}

6、第六类,工作区修改(增加/删除)了受控文件,并执行了git add和git commit和git push操作,想要回退远程库的此次合入。

$git log                     找到此次提交的commit-ID,40位哈希值

commit c2ee73610026a64545bf06d77ecd355970f09016
Author: e <xxxxxx@xxxxxxx.com>
Date:   Fri Jul 27 14:02:23 2018 +0800

    XXXXXXXXXXXXXXXX

$git revert -n commit-ID

$git commit -m "update"

$git push origin master

二、关于stash使用

$git stash                  使当前分支下所有改动备份到git库,从而可以切换到其他分支

$git stash list             查看git库备份的列表

$git stash pop            取出备份列表顶部数据恢复当前分支

三、冲突处理

1、结合Gerrit进行代码review时,冲突解决

#当两个人同时修改并提交了某个文件A到gerrit上,优先review并merge其中一个人的提交,势必造成另个人的gerrit提交显示merge conflict。为了避免abandon然后重新提交的麻烦操作,可进行如下操作快速修改合并:

$:git fetch origin

$git rebase origin/master

#然后查看冲突文件,并手动修改

$git add file.txt

$git rebase --continue

$git push origin/master:refs/for/master

2、rebase的使用场景

场景一:如果代码commit到本地库了,但是commit之前忘记pull了,远程代码也已更新,此时不能使用pull直接拉取远程代码(分支会产生merge的记录):

解决方法:commit之后,使用git fetch,拉取远程代码到暂存区,然后使用git rebase origin/master,此时会产生冲突,解决冲突后即可提交,这样分支不会产生merge的记录

场景二:commit提交之前先使用pull总是没问题的,但如果pull不下来,是因为代码和远程代码冲突了,此时有两种解决办法:

1.使用git stash 保存本地修改的代码到缓存区,此时代码会还原为没修改之前的,此时在使用git pull拉取代码,然后使用git stash pop恢复缓存区的代码,此时解决冲突即可提交

2.先commit提交本地代码到本地库,这时候不要直接pull(分支会产生merge的记录),先使用git fetch,拉取远程代码到缓存区,然后使用git rebase origin/master,此时会产生冲突,解决冲突后即可提交,这样分支不会产生merge的记录

git pull = git fetch + git merge
git pull –rebase = git fetch + git rebase

git pull –rebase 理解
这个命令做了以下内容:
a.把你 commit 到本地仓库的内容,取出来放到暂存区(stash)(这时你的工作区是干净的)
b.然后从远端拉取代码到本地,由于工作区是干净的,所以不会有冲突
c.从暂存区把你之前提交的内容取出来,跟拉下来的代码合并
所以 rebase 在拉代码前要确保你本地工作区是干净的,如果你本地修改的内容没完全 commit 或者 stash,就会 rebase 失败。

git add 的几种参数区别:
git add -A 保存所有的修改
git add . 保存新的添加和修改,但是不包括删除
git add -u 保存修改和删除,但是不包括新建文件。
如果只想提交某个文件,可以使用git add 路径/文件名 或者 git add 路径/

四、把本地项目加入到github仓库管理

1)在github上创建仓库new repository

省略创建过程

2)在github上找到个人头像--Settings--SSH and GPG keys,选择new SSH key ,添加一个title,在电脑找到C:\Users\用户\.ssh文件夹,复制id_rsa.pub中的内容粘贴到key栏下。

3)在本地项目根目录下初始化本地仓库,执行:

$git init

4)将本地仓库与远程仓库建立关联

$git remote add origin git@github.com:xxxx/xxxxxxxx.git

其中 origin代表远程库,如果关联了多个远程库,需要分别取名,git@github.com:xxxx/xxxxxxxx.git为远程库地址

5)一次使用如下命令,提交本地文件

$git add -A

$git commit -m "add file to github"

6)远程仓库与本地库同步

$git pull origin master

7)把本地库内容推送到远程库

$git push origin master

push
把本地分支推送到远程主机的分支?? 
git push origin local:remote 
可以省略远程分支名 
git push origin local 将本地分支推送到与之存在追踪关系的分支(通常就是同名分支) 
在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系, 
当前分支与远程分支存在追踪关系 
git push origin 
当前分支只有一个追踪分支 
git push

PULL命令
把远程分支取回本地并合并指定分支?? 
git pull origin 远程分支:本地分支 
把远程分支取回本地并合并到当前分支?? 
git pull origin 远程分支 
把远程和当前分支存在追踪关系的分支和当前分支进行合并 
git pull

PUSH命令
把本地分支推送到远程主机的分支?? 
git push origin local:remote 
可以省略远程分支名 
git push origin local 将本地分支推送到与之存在追踪关系的分支(通常就是同名分支) 
在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系, 
当前分支与远程分支存在追踪关系 
git push origin 
当前分支只有一个追踪分支 
git push

origin是什么意思?? 
git会自动把远程仓库的名字命为origin,使用git remote -v 可以看到origin指的地址是什么。

HEAD是什么?? 
可以看做是一个指针,始终指向当前分支,当前分支对应着最新一次提交的commit hash。

push如何添加topic??

topic是一个把一组changes归集到某个分类里的方法。比如有一个很大的feature需要由若干个人一起来完成。每个人都在自己的change里面工作。那么就可以把这一组changes全部都通过一个topic归集到一起。通过git push的方式添加带有某个topic的change的方法是在push的reference后面加上%topic=topicname参数

git push HEAD:/refs/for/master%topic=topicname

1.  git add XX           将修改进行添加 添加到缓冲区  
2.   git commit -m         "XX"  将存在缓存区中的修改进行提交 提交到git版本仓库 
3.   git status           查看状态
4.   git log               查看操作历史记录信息
5.   git diff             查看不同的地方
6.   git checkout -- XX   撤销XX文件在工作区的修改
7.   git reset HEAD XX     把暂存区的修改撤销掉(unstage),重新放回工作区
8.   git reset --hard HEAD^   把已经提交的版本进行回退到上一个版本
9.   git rm  XX           从版本库中删除一个文件
10  git checkout -- XX   同上面的第六条一样,可以对工作区中的删除进行恢复
11. git remote add origin git@server-name:path/repo-name.git(server-name:path是服务器的名字和远程账号,可以是GitHub)
12. git push -u YY     把本地仓库push到远程仓库(YY 表示远程仓库的名字)
13. git checkout -b dev 创建一个dev的分支 -b参数表示创建这个分支
14. git branch dev 查看dev分支
15. git checkout ZZ 切换到ZZ分支上
16. git merge dev   merge指令把指定分支的合并到当前分支
17. git branch -d dev  -d 参数将一个分支删除掉
18. git merge --no-ff -m "merge with no-ff" dev    加上--no-ff可以保留合并的信息,看出曾经合并过
19. git stash   可以存储当前的状态
20. git stash list   查看保存的信息
21. git stash pop 恢复之前保存的分支 ,先checkout 回之前保存得分支。
22. git remote 查看远程库  
23. git remote -v   查看更详细的信息
23. git push origin dev 推送到远程,把当前得分支推送上去。可以选择要推送的分支名字 
24. git checkout -b dev origin/dev  将远程分支创建到本地

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值