Git笔记

整理一下最近学习的git知识,以及平时常用的git功能。

.git

使用git init或clone一个远端仓,会在本地建立一个.git目录。这个目录是git仓的全部,把.git拷贝到其他目录下,就能在该目录下建立一个一模一样的git仓

缓存区(staged)

  • 对working derictoy中的文件做的改动,他们的状态是unstaged
  • 使用 git add/git rm/git mv 将其送入缓存区(staged)
  • 使用 git commit 提交缓存区中记录的改动。
  • git diff {filename} 可以查看unstaged和staged中文件的不同
  • git diff --staged {filename} 可以查看staged中的文件和原文件的不同
  • 注意staged和stash的区别

上游分支

git clone可以通过参数 -b 来指定clone远端仓库到本地后拉取哪条分支,不指定则默认拉取master;远端仓库中必须存在同名分支,作为本地分支的上游分支。

通过git branch -vvgit status 命令可以查看本地分支相比上游分支领先/落后多少个commit。

git checkout -b {local_branch} {remote_branch}用来创建并切换分支,并指定该分支的上游分支。

revert和reset

git reset把HEAD指针指向到某一个commit id,这次commit之后的所有commit都会被删除。

git revert用来撤销某一次commit带来的变化,不会影响其他commit。revert本身也需要commit。

非fast-forward形式合并两条分支时,git会自动生成一个合并提交。如果想回退某条分支的merge操作,可以revert这次合并提交的commit,git会让你选择留下这次合并提交的哪一个父分支,另一个父分支所作的改动会被回退。

如何修改一次历史commit

执行git rebase -i {commitid}^(commitid是想要修改的那次提交),git会以commitid的前一次提交作为base,采用交互式的方式,重新提交后面的每一次commit,将想要修改的那一次的提交命令设置为edit即可。