git clone 仓库地址
git status
7.追踪文件
git add 文件名
这里使用git add shoppingList.txt,追踪,然后再次执行git status命令,可以看到状态变了。
git commit -m "备注信息"
这里使用git add -m “Add “shoppingList.txt””,后,再次执行git log可以看到两次提交记录。
说明暂存区里的文件已经提交到本地仓库了。
注意:每次提交之前,都执行一次git status,看一下文件的状态,这是一个好习惯。
把本地仓库的修改提交到中央仓库
git push
总结:
git clone 把中央仓库clone到本地
git add 把文件添加到暂存区
git commit -m “message” 把文件从暂存区提交到本地仓库
git push 本地仓库提交到中央仓库
git status 查看文件状态
git log 查看提交历史记录
拉取其他人的提交
git pull
如果中央仓库的版本领先本地的版本,需要先git pull,保证本地仓库的版本和中央仓库的一致,再提交git push
HEAD 是指向当前 commit 的引用,它具有唯一性,每个仓库中只有一个 HEAD。在每次提交时它都会自动向前移动到最新 的 commit 。
branch 是一类引用。HEAD 除了直接指向 commit,也可以通过指向某个 branch 来间接指向 commit。当 HEAD 指向一个 branch 时,commit 发生时,HEAD 会带着它所指向的 branch 一起移动。
master 是 Git 中的默认 branch,它和其它 branch 的区别在于:
branch 的创建、切换和删除:
总结:
git branch 分支名 创建分支
git checkout 分支名 切换分支
git branch -d 分支名 删除分支
把目标branch上的所有commit合并到当前branch上:
-----------------(master)
git merge branch1
特殊情况1:冲突
git merge --abort
特殊情况2:HEAD领先或落后于目标commit
都不会报错,合并为最新版本
新建分支books写一个功能,写完后推到远程仓库
git checkout -b books
git push origin books
其他人要检验代码:
git pull origin books #这种方式只是拉取了books分支的代码,使用git pull会拉取所有代码
git checkout books
检验完之后,没问题,可以合并到master分支:
git checkout master
git pull
git merge books
把结果推到中央仓库,并把books这个分支删除:
git push
git branch -d books
git push origin -d books #删除远程仓库里的books分支
这是仓库服务提供方(比如github)提供的一种便捷功能。
1.把branch push到中央仓库;
2.在中央仓库创建一个Pull Request。
其他人可以看到我的commit,并评论。
如果确定可以合并,点击Merge pull request就可以合并到master,而且还有delete按钮可以删除该分支。
每个功能都新建一个branch,保证不会对master乱修改
git add .
切换到branch1分支,执行rebase;
git checkout branch1
git rebase master
切换到master分支,执行merge,把head移动到最新的commit上。
git checkout master
git merge branch1
master如果不merge,会导致head仍然在之前的commit位置,会丢失合并之后的一些commit。
如果是两个其他的分支,比如branch1和branch2合并,可以直接rebase,不用merge。
第一步:提交错误代码
git add laugh.txt
git commit -m "laugh"
第二步:发现有问题,修改文件,再次提交
vi laugh.txt #修改文件
git add laugh.txt
git commit --amend -m "laugh2"
从git log里可以看到之前的laugh的提交已经被laugh2覆盖。
总结:
git commit --amend
第一步:把当前commit rebase到指定的commit上
git rebase -i HEAD^^
--等同于
git rebase -i HEAD~2
^ 的用法: ^ 表示把commit往回偏移,偏移量就是 ^ 的个数。
~ 的用法: ~ 后面跟一个数,表示往回偏移,偏移量就是 ~ 后面跟着的数。
第二步:执行完上一步之后,会进入一个编辑页面,点 i 进入编辑状态,修改pick为edit,然后退出
第三步:修改完要修改的文件之后,提交
git add laugh.txt
git commit --amend
git rebase --continue
git reset --hard HEAD^ #丢弃刚提交的commit
比如撤销倒数第二条提交:
git rebase -i HEAD^^
之前修改的时候是把pick改为edit,删除的时候是直接把那一行删除。
git rebase --onto HEAD^^ HEAD^ branch1
git push origin branch1 -f
git revert HEAD^ #反转倒数第二个commit,两个commit互相抵消
三种参数:
git reset --hard HEAD^
git reset --soft HEAD^
git reset HEAD^
本质:签出(checkout)指定的commit
checkout的目标也可以不是branch,而是指定某个commit。
git checkout HEAD^^
git checkout master~5
git checkout 78abc
git checkout 78abc^
这些都是可以的。
另外在git status的提示语中也说明可以使用git checkout –
checkout和reset的不同
都可以改变HEAD的位置,最大的区别在于:reset在移动时HEAD会带着它的branch一起移动,而checkout不会。当时用checkout指向其他地方的时候,HEAD会和branch分离。
checkout有一个专门分离HEAD和branch而不用移动HEAD的语句:
git checkout --detach
stash:临时存放工作目录的改动
git stash
这样,工作目录就会被清空,所有改动都保存起来,然后可以切换到master分支进行打包。
打完包后,切回之前的分支,然后:
git stash pop
git satsh -u
reflog:引用的log
它会显示HEAD的移动记录。
从图中看出,最后一次是从branch1转移到master,所以前一个commit就是在branch1被删除之前的位置,也就是第二行的c08de9a。
切回到c08de9a,重新创建branch1,就可以找回。
git checkout c08de9a
git branch -b branch1
查看其他引用的reflog
git reflog master