Git让gitignore生效

改动过.gitignore文件之后,在repo的根目录下运行:

git rm -r --cached .
git add .

Git基本操作

移动到代码所在目录,运行

git init

添加需要提交的文件到暂存区

git add xxx.file

添加所有文件

git add -A

提交代码修改

git commit -m "comment content"

查看当前状态

git status

查看修改日志

git log

从远程库克隆版本库

tie clone [远程库地址] 

打包一个库文件

git archive

Tag

标签(Tag)可以针对某一时间点的版本做标记,常用于版本发布。

创建Tag,给当前版本打标记

git tag [tag name]

例如

git tag v1.0

创建带付诸的Tag

git tag -a v0.1 -m “0.1版本发布”

查看所有的Tag

git tag

切换到标签

git checkout [tagname]

用git show命令可以查看标签的版本信息

git show v0.1

删除标签

git tag -d v0.1

Tag推送到服务器

通常的git push不会将Tag对象提交到git服务器,我们需要进行显式的操作:

git push origin v0.1.2 # 将v0.1.2 Tag提交到git服务器
git push origin –-tags # 将本地所有Tag一次性提交到git服务器

分支操作

查看分支

git branch

查看远程分支

git branch -a

分支修改名称

git branch -m [新名称] [旧名称]
git branch -m mymaster master

git默认master作为主分支

创建分支

从一个现有的分支创建新分支

git checkout -b [新分支名称] [参照分支]
git checkout -b testing master

没有参照分支的话就以当前分支参照创建新分支

删除分支

git branch -d [branch_name]

删除远程分支

git branch -r -d origin/branch-name

分支合并

开发过程中需要维护一条主线分支(master),添加功能是新开一个feature分支,当功能开发完毕后需要合并到主分支上
分支合并有两种方法,git merge和git rebase

使用

git checkout master
git rebase feature
git merge  feature

两种方法的区别是merge是将feature分支的最终修改内容合并到master分支上,feature分支的commit内容仍然保持独立。rebase是feature分支除了修改内容,所有的commit记录也合并到master上。

git merge分支合并方式

1.直接合并
两条分支的历史轨迹合并,合并到一起

git merge feature

2.压合合并
将被合并分支的所有提交压合成一个提交合并到主分支上来

git merge --squash feature

3.拣选合并 挑选一个分支合并到

git cherry-pick [31483ed 7位的提交编号]

git stash 修改暂存命令

如果需要切换到另一个分支并且不想提交当前分支的修改,可以适用git stash命令把当前分支的修改暂存起来
git stash会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。

储藏修改

git stash

实际应用中推荐给每个stash加一个message,用于记录版本,使用git stash save取代git stash命令。

git stash save "stach comment"

可以通过git stash pop命令恢复之前缓存的工作目录

git stash pop

查看现有stash

git stash list
//运行结果
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051 Revert "added file_size"
stash@{2}: WIP on master: 21d80a5 added number to log

移除stash
可以使用git stash drop命令,后面可以跟着stash名字

git stash drop stash@{0}

或者使用git stash clear命令,删除所有缓存的stash。

从stash创建分支 储藏的修改内容移动到一个新的分支

git stash branch [branch_name]

git rebase命令

1.对已经提交的commit进行编辑修改

合并多次commit成为一个commit

 git rebase -i [startpoint] [endpoint]

参数是设置合并的开始点和结束点,可以只设置开始点,那么就是一直合并到最近的commit

2.将某一段commit粘贴到另一个分支上

git rebase [startpoint] [endpoint] --onto [branchName]

参数:

  • startpoint 需要复制的commit起始点
  • endpoint 需要复制的commit结束点
  • branchName 要将该指定的提交复制到哪个分支上

忽略文件

工程中经常需要忽略一些不需要提交的文件,比如ide配置信息,生成的临时文件等。这就需要编辑 .ignore文件来指定忽略的文件和目录 编辑后需要重新add所有文件让.ignore文件生效

git rm -r --cached .
git add .
git commit -m 'update .gitignore'

撤销修改

撤销工作区的修改

git checkout -- 【filepath】

git revert

git revert是生成一个新的提交来撤销某次提交,此次提交之前的commit都会被保留

revert操作必须提供名称,让Git知道反转什么

git revert HEAD 撤销前一次 commit
git revert -n [commit_id] 撤销到某一次提交

git reset

git reset是通过删除最近的提交,回退到之前的版本

HEAD的概念

HEAD简单来说,指的就是当前当前分支的最近一次提交后的版本,也就是说,HEAD代表的是最新的版本,根据这个概念,我们还可以知道HEAD^就是指上一个版本,同理HEAD^^就是再上一个版本

–hard 和 –soft 的区别

git reset –hard
相当于 git reset –hard HEAD 删除暂存区里的所有修改,回到最新的commit版本
git reset –hard HEAD^ 就是回到上一个commit版本

git reset –soft
不删除暂存区里的修改,只把commit的内容回退到上一个版本


git无法pull仓库refusing to merge unrelated histories
如果合并了两个不同的开始提交的仓库,在新的 git 会发现这两个仓库可能不是同一个,为了防止开发者上传错误,于是就给下面的提示
fatal: refusing to merge unrelated histories
解决方式是添加 –allow-unrelated-histories 告诉git允许不相关历史合并