关联本地分支和远程分支
git clone
命令会自动在本地建立一个master
分支,它是origin/master
的‘追踪分支’。使用git pull / git push
就可以将本地master
分支和远程origin/master
通信。但是如果你本地新建立了个develop分支,想提交时却要git push origin develop
才能送到远程develop分支上,push也是要指明orgin develop
。git 不会自动关联,这会很不方便。所以需要通过命令一次性建立本地分支和远程分支的关联
-
set-upstream
git branch --set-upstream my_branch origin/my_branch
–set-upstream 将被废弃并删除. 使用 –track 或者 –set-upstream-to来替代。
-
track
git branch --track experimental origin/experimental
-
set-upstream-to
在develop分支上
git branch --set-upstream-to=origin/develop
或简写:
git branch -u origin/dev
也可以在第一次将本地分支提交到远程时可以直接建立联系:
git push -u origin my_branch
忽略掉已经被误添加到git库中的文件
首先要讲忽略文件补到.gitignore
中,然后重置git库信息:
git rm -r --cached .
git add .
git reset HEAD
如果你已经将不该被版本控制的文件添加到远程了,要手动删除远程的这些文件。
顺便提下:忽略所在库根目录下的文件 package.json会忽略库下所有package.json文件,包括子目录下的文件,如package/package/package.json /package.json才只会忽略库根目录下的package.json文件
git rebase
merge是将2个commit对象合并生成新的commit对象。rebase在base commit后创建新commit对象,将待合并的commit移到这里。结果就二十rebase的提交历史永远是线形的。
水太深,好好读官方文档:
git pull —rebase
或git rebase -i commitID
后若存在冲突:
git add <some-file>
git rebase --continue
修改密码
根据版本新建分支
git branch branchName HEAD~3
git branch branchName commitId
撤销修改与回退
-
撤销工作目录(未add,未commit)修改
git checkout -- fileName
-
撤销缓存区修改(已经add,未commit)的最新修改
只是移除暂存区的内容,而不是撤销对工作目录的修改。
git reset HEAD -- fileName
-
撤销版本库(已经commit)修改【回退版本】
git reset --hard HEAD~3 git reset --hard versionId
git reset 参数:
- –soft : 缓存区和工作目录都不会被改变
- –mixed : 默认选项。缓存区和你指定的提交同步,但工作目录不受影响
- –hard : 缓存区和工作目录都同步到你指定的提交
修改commit 信息
-
最新的commit
-
会生成新的commit id,需要其他合作者也更新
git commit --amend -m "New commit message"
-
commit合并到上一次&本次提交不会有commit 信息
git commit --amend
-
-
还未提交到远程的本地的commit信息(可能多条)
git rebase -i versionId
后在终端vim里改,将你需要修改的commit 选择r模式 -
将分支上所有commit 作为一条commit信息合并
git checkout master git merge --squash branchName git commit
暂存
git stash
用于将当前修改存暂存区但不提交,新建一个分支进行下一步可能提交的修改
-
查看stash文件:
git stash list
-
恢复暂存区文件到工作目录
git stash apply
-
将文件从暂存区移除:
git stash apply //恢复 git stash drop //删除
或者
git stash pop //恢复的同时把stash内容也删了
将cherry-pick合并某个提交到自己的分支中
如果只想将远程仓库的一个特定提交合并到自己的分支中该怎么做呢?可以使用git cherry-pick 来选择给定SHA值的提交,然后将其合并到当前分支中:
git cherry-pick versionId
也将本地分支的某个commit 版本合并到主支
git checkout new-feature
git log 找到版本号
git checkout master
git cherry-pick versionId
标签相关
-
推送指定标签:
git push origin v1.5
-
推送多个标签:
git push origin --tags
-
查看git标签列表
git tag -l
-
查看某个标签下的代码
git checkout tag_name
-
在 tag 代码的基础上做修改
checkout切换到某个标签上,git 会提示你当前处于一个“detached HEAD” 状态,因为 tag 相当于是一个快照,是不能更改它的代码的,如果要在 tag 代码的基础上做修改,你需要一个分支 git checkout -b branch_name tag_name
查看文件每一行最近修改信息
能查看到文件的每个部分是谁修改
git blame 文件名
git bisect开启debug
git bisect:debug,通过测试找出出问题的版本(二分查找)
-
开始bisect
git bisect start
-
告诉git当前版本是有bug的
git bisect bad
-
告诉git 你所知道的正常的版本
git bisect good versionId
(如果你不清楚具体的版本号,小项目就设最开始的版本吧,返回初始版本:
git rev-list --max-parents=0 HEAD
) -
运行测试。你要提前写好测试代码或者能找到测试特征
make test
-
告诉git测试结果,并重复4
git bisect bad|good