-
从远程获取代码库
git fetch
-
从远程获取代码库,不自动merge
-
$ git rebase master
-
这时,git会把dev分支里面的每个commit取消掉,然后把上面的操作临时保存成 patch 文件,存在 .git/rebase 目录下;然后,把 dev 分支更新到最新的 master 分支;最后,把上面保存的 patch 文件应用到 dev 分支上;
-
从 commit 记录我们可以看出来,dev 分支是基于 hotfix 合并后的 master ,自然而然的成为了最领先的分支,而且没有 merge 的 commit 记录,是不是感觉很舒服了。
-
我们在使用rebase合并分支时,也会出现conflict,在这种情况下,git 会停止 rebase 并会让你去解决冲突。在解决完冲突后,用 git add 命令去更新这些内容。然后再次执行git rebase --continue,这样git 会继续应用余下的 patch 补丁文件。
-
git pull –rebase
-
这个命令做了以下内容:
a.把你 commit 到本地仓库的内容,取出来放到暂存区(stash)(这时你的工作区是干净的)
b.然后从远端拉取代码到本地,由于工作区是干净的,所以不会有冲突
c.从暂存区把你之前提交的内容取出来,跟拉下来的代码合并 -
从远程下载代码并合并
git pull 和 git pull -r 的区别
git pull = git fetch + git merge
git pull -r = git fetch + git rebase
假设有个场景,A和B都需要push代码到origin的master上,A和B拉取的代码后,新建了自己的分支进行修改,并要提交到master上;
此时A的修改内容先提交到origin上;
那么B在提交前需要拉取最新的代码(包含A的修改的代码D),此时B有两个选择:
如果他使用git pull origin master 拉取代码,使用git
log查看提交记录,此时可以看到有一个commit节点叫Merge xxxxxxxxxx… 这样会形成一个菱形的提交记录;
如果使用git pull -r origin master 可以避免这种菱形提交,会将B的提交rebase到最新master节点上,此时可能会遇到的问题是,如果B的提交和A的提交有交集的地方,会引起冲突,如果这种情况,会提示你先解决冲突conflict,需要B去比较与A的提交冲突的地方,解决完冲突之后,add更新下B的修改后,执行git rebase --continue 就可以继续pull -r的过程;过程中如果觉得有任何操作失误,可以使用git rebase --abort 随时停止pull rebase的过程,并且分支会回到rebase开始前的状态。
2.上传远程代码
git push origin HEAD:refs/for/master
1.git push <remote 名字> <本地分支的名字> : <远程库的名字>
git push origin HEAD:refs/for/master
git push 肯定是推送
origin : 是远程的库的名字
HEAD: 是一个特别的指针,它是一个指向你正在工作的本地分支的指针,可以把它当做本地分支的别名,git这样就可以知道你工作在哪个分支
refs/for :意义在于我们提交代码到服务器之后是需要经过code review 之后才能进行merge的
refs/heads 不需要
3.修改提交记录
git commit --amend
second commit 是你上次提交的描述,下面是一下说明信息,有告诉你上次提交的文件信息等等,可忽略。接下来你要是想修改描述信息的话。直接键入:i,此时进入了输入模式
可用键盘上下键转到描述所在的那一行,然后进行修改:
修改完成后,按下 Esc键退出编辑模式,在键入 :wq 回车退出并保存修改,完成提交。这是你再git log 看一下提交日志:
4.回退
-
退回到最出的origin/master,其commit节点号是d9ab27dc42c753b9a1bb2163221b73f63bd490af 那么我可以使用
-
git reset --hard d9ab27dc42c753b9a1bb2163221b73f63bd490af 回到这个节点。
-
用 git reset --hard HEAD^ 回退到上一个版本
5.上传至缓冲区
-
git add . 将添加当前修改,也可以 git add 目标文件名 添加指定文件;可以使用git status 查看当前的状态;如果有某些文件在.gitignore文件里面被忽略了不让add的话, 我们可以使用 git add -f 目标文件名 进行强制添加;
-
git add命令将文件修改添加到暂存区Stage,也就是将要提交的文件修改添加到index中。关于暂存区概念请查看Git之工作区、版本库、暂存区
-
用法
-
git add . 将当前工作区中所有的的文件修改、文件新增、文件删除添加到暂存区
-
git add -u 将当前工作区中所有的文件修改和文件删除添加到暂存区,但不包括文件新增
-
git add -A 将当前工作区中所有的的文件修改、文件新增、文件删除添加到暂存区
-
git add * 将当前工作区中所有的文件修改、文件新增添加到暂存区,但不包括文件删除