Git学习总结

git整理:

工作区中的.git目录为Git版本库,git add将文件提交到暂存区,git commit将文件提交到本地仓库,git push将文件提交到远程仓库。

历史版本回退及提交至远程仓库

1
2
3
4
5
6
git reset --hard HEAD^  可以回退版本  当回退多个版本时可以使用 HEAD~100(恢复到第100个版本)。
git reflog 用于记录每次的命令,最上方为最近一次的命令
git reset HEAD <file> 将缓存区中的修改回退到工作区。
git checkout -- <file> 将版本库中的版本替换工作区的版本,可以做恢复用。
git push 将当前分支master推送到远程
git commit 将缓存区中的文件推送到分支master(本地)

分支的创建、切换与合并

1
2
3
4
5
git checkout -b <branch> 创建一个分支并切换,等同于git branch <branch> git checkout <branch>两条命令
git branch 查看当前分支
git merge 命令用于合并指定分支到当前分支
git branch -d <branch> 删除分支
git log --graph 可以查看分支合并图

对远程分支进行操作

1
git push origin --delete branch <branchname>或git push origin :<branchname> 删除远程仓库中的分支

重命名远程分支:
1、删除远程分支:git push –delete origin
2、重命名本地分支:git branch -m
3、推送本地分支:git push origin

提交出错解决方法

如果在提交远程仓库的时候出现“更新被拒绝,因为您当前分支的最新提交落后于其对应的远程分支”,此时应该先获取远程更新,然后合并本地的分支,最后提交.

1
2
3
4
5
6
git fetch origin;		# 获取运程仓库
git merge origin/master # 将本地仓库与远程仓库合并

git pull = git fetch + git merge 可能会产生冲突,需要手动解决

--no-ff 参数表示禁用Fast forward

如果出现”您要求从远程 ‘origin’ 拉取,但是未指定一个分支。因为这不是当前分支默认的远程仓库,您必须在命令行中指定一个分支名。”
执行以下内容:
git branch --set-upstream-to corigin/master master

出错时

出错内容:

1
2
3
4
error: failed to push some refs to 'https://github.com/bnq456/bnq456.github.io.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
  • 强制推送
    在确定自己仓库中的内容低于本地仓库中的内容并且确定本地优于远程时,如果无法进行推送,可以选择强制推送
    git push -u origin master -f
  • push前先将远程repository修改pull下来
    1
    2
    git pull origin master
    git push -u origin master
  • 若不想merge远程和本地修改,可以先创建新的分支:
    1
    2
    3
    git branch [name]
    然后push
    git push -u origin [name]

fetch 和 pull的区别:

1
2
3
4
5
6
git fetch:将远程主机的最新内容拉取到本地,是否合并由用户决定。
git pull:将远程主机的最新内容拉取到本地后直接合并,可能会产生冲突,需要手动解决。
解决方法:
git reset --hard FETCH_HEAD
git pull
注:将本地的冲突文件冲掉,不仅需要reset到MERGE-HEAD或HEAD,还需要--hard。当后面没有hard,不会冲掉本地工作区,只会冲掉stage区。

fetch和pull的不同

Git中工作环境的临时存储与恢复

1
2
3
4
5
git stash 把当前工作现场存储起来,用于以后恢复现场继续工作
切换回工作时:
git stash list 列出所有存储的工作环境
result: stash@{0}: WIP on dev: cc559a8 add merge
git stash pop 切回工作场景,或git stash apply stash@{0} 恢复后不删除stash中的内容,需要使用git stash drop <name>删除

pop和 apply的区别
pop是将工作环境切回后直接删除
apply是先应用工作环境,然后存储的工作环境是否删除由用户自己决定。使用:git stash drop 进行删除

实验性质的代码最好新建分支

分支的创建、删除、合并与推送

1
2
3
4
5
6
7
8
9
10
11
git branch <branchname>
git checkout <branchname>
以上两条命令等同于git checkout -b <branchname>
git branch -D <name> 表示强行删除一个分支
git merge <branchname> 分支的合并,表示要将<branchname>分支合并到当前分支上

分支的推送:
master分支是主分支,因此要时刻与远程同步;
dev分支是开发分支,团队所有成员都需要在上面工作,所以需要时刻与远程同步;
bug分支是本地修复bug,可推送可不推送;
feature分支取决与是否在上面进行开发。

多人协作:

1、首先,可以试图用git push origin 推送自己的修改;

2、如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

3、如果合并有冲突,则解决冲突,并在本地提交;

4、没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!

5、如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch –set-upstream-to origin/

rebase:(不是很了解)

rebase操作可以将本地未push的分叉提交历史整理成一条直线;
rebase的目的是使我们在查看提交的变化时更容易,因为分叉的提交需要三方比较。

git 标签:

git tag 用于新建一个标签,默认为HEAD,当创建带有说明的标签时,用-a指定标签名,-m指定说明文字
git tag可以查看所有的标签
当给以前忘记打标签的项目打标签时,可以先找出要打标签项目的编号,然后git tag
-d用于删除标签
远程标签推送:
git push origin 推送一个本地标签到远程
git push origin –tags 将所有标签推送到远程

1
2
3
当删除远程标签时:
1、首先先删除本地的标签 git tag -d <tagname>
2、然后删除远程的标签 git push origin :refs/tags/<tagname>或者git push origin --delete tag <tagname>(作用与上两步相同)

日志文件查询

1
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"