git常用命令

  • 2020-05-05
  • 浏览 (1348)

git use

工作区域

Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:
go init

  • Workspace:工作区,就是你平时存放项目代码的地方
  • Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
  • Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
  • Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

初始一个仓库

#在当前目录新建一个Git代码库
git init
#或在当前目录新建一个目录,将其初始化为Git代码库
git init [project-name]

关联远程仓库

git remote rm origin
git remote add origin url

解决冲突

在文本编辑器中清理这些冲突,处理完后将文件标记为已解决状态(通过执行命令 “git add filename”)。最终,当所有的冲突被解决后,你必须通过一个正常的提交操作来完成这个清理合并冲突的工作。

撤销一个合并

git reset --hard

当你解决完冲突,并且在合并完成后发现一个错误,你仍然还是有机会来简单地撤销它。你只须要键入 “git reset --hard ” 命令,系统就会回滚到那个合并开始前的状态。

go reset

分支(branch)的基本操作

查看本地所有分支

git branch

查看远程所有分支

git branch -r

创建一个功能分支(从develop创建一个分支feature-x)

git checkout -b feature-x develop

开发完成后,将功能分支合并到develop分支

git checkout develop
git merge --no-ff feature-x

上一条命令的--no-ff参数是什么意思。默认情况下,Git执行"快进式合并"(fast-farward merge),会直接将Master分支指向Develop分支。使用--no-ff参数后,会执行正常合并,在Master分支上生成一个新节点。为了保证版本演进的清晰,我们希望采用这种做法。

推送分支到远程仓库

git push --set-upstream origin feature-x

删除本地feature分支

git branch -d feature-x

删除远程分支

git branch -d -r <branchname> //删除远程分支,删除后还需推送到服务器
git push origin:<branchname>  //删除后推送至服务器

重命名本地分支

git branch -m <oldbranch> <newbranch>

重命名远程分支:
1、删除远程待修改分支
2、push本地新分支到远程服务器

一些选项解释:

-d
--delete:删除

-D
--delete --force的快捷键

-f
--force:强制

-m
--move:移动或重命名

-M
--move --force的快捷键

-r
--remote:远程

-a
--all:所有

丢弃工作区的修改,让这个文件回到最近一次git commit或git add时的状态。

git checkout -- file

把暂存区的修改撤销掉

git reset HEAD <file>
#此时需要再清理下工作区
git checkout -- <file>

删除一个文件

# 删除后,在.gitignore添加这个文件,git将不再跟踪这个文件
git rm file
#强制删除
git rm -f file
#只从stage中删除,保留物理文件
git rm --cached file

查看提交日志

git log

强推到远程:

git push origin HEAD --force
#或 git push -f

还原代码

在利用github实现多人合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,有两种解决方法:回退(reset)、反做(revert)。

1. reset

git reset --hard HEAD^         回退到上个版本
git reset --hard HEAD~3        回退到前3次提交之前,以此类推,回退到n次提交之前
git reset --hard commit_id     退到/进到 指定commit的sha码,使用 git log 查看commit_id

#使用“git push -f”提交更改,此时如果用“git push”会报错,因为我们本地库HEAD指向的版本比远程库的要旧

使用git的每次提交,Git都会自动把它们串成一条时间线,这条时间线就是一个分支。如果没有新建分支,那么只有一条时间线,即只有一个分支,在Git里,这个分支叫主分支,即master分支。有一个HEAD指针指向当前分支(只有一个分支的情况下会指向master,而master是指向最新提交)。每个版本都会有自己的版本信息,如特有的版本号、版本名等。git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本。如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以用这种方法。

2. revert

git revert是用于“反做”某一个版本,以达到撤销该版本的修改的目的。比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西

适用场景: 如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法。

操作

1、反做,使用“git revert -n commit_id”命令。如下命令,我们反做版本号为8b89621的版本:

git revert -n 8b89621019c9adc6fc4d242cd41daeb13aeb9861 1

注意: 这里可能会出现冲突,那么需要手动修改冲突的文件。而且要git add 文件名。

2、提交,使用 git commit -m "提交信息"

3、使用 git push 推上远程库

参考 一个小时学会Git

0  赞