Git常规使用备忘录
git安装
1.下载后安装
以Windows系统为例,下载地址:http://git-scm.com/download/win 自动下载
2.运行Git Bash
git config --global user.name xxx
git config --global user.email xxx@huifu.com
3.生成SSH公钥
ssh-keygen #一路回车就行
4.配置公钥到gitlab
C:\Users\admin\.ssh路径下,记事本打开id_rsa.pub,拷贝内容到gitlab上配置
5.eclipse导入代码
file -> import -> git -> Projects from Git #不需要填写账号密码
git配置
配置全局用户名和邮箱
git config --global user.name "abc"
git config --global user.email "abc@163.com"
配置局部用户名和邮箱
git config user.name "abc"
git config user.email "abc@163.com"
gitignore
添加.gitignore后,重新进行版本控制
git rm -r --cached .
git add .
git commit -m "update .gitignore"
git提交变更操作
1.拉取最新代码
git pull --rebase
2.将新增/修改的文件加入暂存区
方式1:git add 文件名
方式2:git add -p #对比选择变更的代码
3.提交本次变更到本地仓库
git commit -m '注释'
4.推送本次变更到远程仓库
方式1:git push origin 分支名
方式2:git push #省略[origin 分支名]参数,默认会将当前分支提交到远程对应分支
git 撤销操作
未执行add操作的撤销
git checkout xxx
执行add操作后,未执行commit的撤销
git reset HEAD xxx
commit后撤销
git reset --soft HEAD^ // 撤销commit回到前一个版本,不撤销git add,不恢复变更
git reset --soft HEAD~1 // 撤销commit回到前一个版本,不撤销git add,不恢复变更
git reset --soft HEAD~2 // 撤销commit回到前两个版本,不撤销git add,不恢复变更
git reset --mixed HEAD^ // 撤销commit回到前一个版本,并撤销git add,不恢复变更
git reset --hard HEAD^ // 撤销commit回到前一个版本,撤销git add,恢复变更
强制回退远程版本
git log #查看本地提交记录,找到要回退的commit_id
git reset --hard commit_id #强制回退到某次提交
git push -f origin 分支名 #强制推送到远程仓库
回退某次commit
使用git revert 逆向某次操作,对某次commit进行反向操作:
git revert -n commit_id //逆向某次commit操作,如果有冲突解决冲突,使用git add添加修改,使用git commit提交本次修改
git push
替换上一次提交的信息
git commit --amend -m "Fixes bug"
撤销当前分支的变化
在当前分支修改并做了几次提交,发现不应该在当前分支做修改,应该新建分支修改并提交。
在当前已修改过的分支上新建一个分支,指向当前最新的提交,注意,这时依然停留在当前分支。
git branch xxx #xxx代表分支名称
撤销当前分支到修改提交之前的状态
参考上面的撤销操作
切换到新创建的分支
git checkout xxx #xxx代表分支名称
从暂存区撤销文件
如果不小心把一个文件添加到暂存区,可以用下面的命令撤销。
git rm --cached [filename]
上面的命令不影响已经提交的内容。
撤销工作区的文件修改
如果工作区的某个文件被改乱了,但还没有提交,可以用git checkout命令找回本次修改之前的文件:
git checkout -- [filename]
它的原理是先找暂存区,如果该文件有暂存的版本,则恢复该版本,否则恢复上一次提交的版本。
注意,工作区的文件变化一旦被撤销,就无法找回了。
撤销提交
提交代码以后,意识到这个提交有问题,应该撤销掉,执行如下命令撤销:
git revert HEAD
抵消掉上一次提交导致的所有变化,它不会改变过去的历史,恢复内容到上一次提交,但是默认会保留本次的提交记录,同时会产生一次revert commit记录。
git revert命令还有两个参数:
--no-edit:执行时不打开默认编辑器,直接使用 Git 自动生成的提交信息。
--no-commit:只抵消暂存区和工作区的文件变化,不产生新的提交。
代码合并
以下操作将master主干合并到feature分支
1.拉取最新代码
在当前分支拉取最新代码:git pull --rebase
如果有冲突使用以下步骤解决冲突:
1.1 手动解决冲突
1.2 git add filename
1.3 git commit –m 'xxxxx'
1.4 git status //根据提示继续操作
2.切换到master主干
git checkout master
git pull --rebase
3.切回feature分支
git checkout feature-xxx
4.合并master代码
git merge master
有冲突手动解决冲突,解决办法同上
5.推送到远程仓库
git push
hotfix操作
步骤:
1.拉取develop分支代码到最新
2.拉取master分支代码到最新
3.git flow hotfix start 临时分支名
4.紧急修改操作
5.git add
6.git commit
7.git flow hotfix finish 临时分支名
8.编辑提交的信息
9.分别提交到master和develop
feature分支操作
1. 开始一个新功能:
git flow feature start xxxx
2. 提交这个功能到远程库:
git flow feature publish xxxx
3. 完成功能,合并到develop:
git flow feature finish xxxx
4. 记得删除远程仓库里的分支:
git push origin :xxxx
A分支的部分提交应用到B分支
git cherry-pick
使用步骤:
1.在A分支使用git log查看需要用到的commit_id,例如abc
2.切换到B分支,使用git cherry-pick abc
cherry-pick也支持将多个部分提交应用到B分支,例如:
git cherry-pick
但是要保证先后顺序,即提交commitHash1必须早于提交commitHash2
也支持区间,例如:
git cherry-pick
但是要保证先后顺序,即提交commitHash1必须早于提交commitHash2
若过程中发生冲突,解决代码冲突后,第一步将修改的文件重新加入暂存区(git add .),第二步使用下面的命令,让Cherry pick过程继续执行:
git cherry-pick --continue
当然也可以在发生代码冲突后,放弃合并,回到操作前的样子,执行命令:
git cherry-pick --abort
学之多,而后知之少!朋友们点【在看】是我持续更新的最大动力!