1. 使用 git checkout 撤销本地修改
放弃对本地已修改但尚未提交的文件的修改,还原其到未修改前的状态。
注意: 已 add/ commit 的文件不适用个方法,应该用本文提到的第二种方法。
命令如下:
git checkout . # 撤销对所有已修改但未提交的文件的修改,但不包括新增的文件
git checkout [filename] # 撤销对指定文件的修改,[filename]为文件名
2. 使用 git reset 回退项目版本
可以回退到任意已经提交过的版本。已 add / commit 但未 push 的文件也适用。
命令如下:
git reset --hard [commit-hashcode]
[commit-hashcode]是某个 commit 的哈希值,可以用 git log 查看
因此一般用法是先用 git log 查看具体commit的哈希值,然后 reset 到那个版本。
3. git多个账号 动态添加当前密钥
eval $(ssh-agent -s) :密钥管理器
ssh-add ~/.ssh/other_id_rsa:添加自定义密钥
4. git 从已有分支 建立新分支
从master分支中复制一个新分支dev
-
切换到被copy的分支(master),并且从远端拉取最新版本
$git checkout master
$git pull
或者直接 git clone (-b branch) 远程路径 -
建立新分支,并切换到新分支
$git checkout -b dev
Switched to a new branch ‘dev’
等同于:git branch dev
git checkout dev -
把本地(与master一样的代码)push到远程dev分支
$git push origin dev -
拉取远端分支
$git pull
此处会失败,根据提示进行关联:
Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动”追踪”origin/master分支。
因此,远程追踪的依旧是master,应该修改为dev
-
关联
$git branch --set-upstream-to=origin/dev
注意:这里branch之后都是没有空格的,如果有空格则是错误命令 -
再次拉取 验证
$git pull
4. 强行一个分支覆盖另个分支
如:当前分支是update分支,我想讲dev分支上的代码完全覆盖update分支,首先切换到update分支。(或者直接git clone -b update)
git reset --hard origin/dev
执行上面的命令后update分支上的代码就完全被dev分支上的代码覆盖了(只是针对本地分支)也就是本地代码变成了dev的代码,但是本地origin依旧跟踪update分支。然后将本地分支强行推到远程分支。
git push origin update -f
代码回滚:https://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting
5.Git 合并远程分支
前言
有的时候我们需要跟别人合作进行开发,然后分别使用不同的Git分支,等项目完成时,需要进行代码合并,就需要知道Git如何合并远程分支。
步骤
假设你本地在使用的分支为a(master也是一样的),需要合并的远程分支为b
第一步:在本地新建一个与远程的分支b相同(被合并的版本)的分支b
git checkout -b b origin/b
该指令的意思:创建一个本地分支,并将远程分支放到该分支里面去。
第二步:将远程代码pull到本地
git pull origin b
第三步:返回到你的分支a
git checkout a
第四步:合并分支a与分支b
git merge b
该指令的意思:当前所在分支与b进行合并。
到此为止,可能会出现有些文件合并失败:
冲突(内容):合并冲突于 order-preference/pom.xml
自动合并 common/pom.xml
冲突(内容):合并冲突于 common/pom.xml
自动合并失败,修正冲突然后提交修正的结果
其中common下的pom自动合并失败,此时需要手动合并修改,之后git add, git commit
第五步:把本地的分支a同步到远程
git push origin a
下面步骤可用可不用
第五步:如果你不需要本地或者远程的分支,你可以查询并删除多余分支。
本地:查询本地分支:
git branch
删除本地分支:
git branch -D br
远程:查询远程分支:
git branch
删除远程分支:
git push origin :br (origin 后面有空格)
5.Git push之前 先同步远程代码
以master为例:
git fetch origin master
git merge origin/master