git commit/ git rebase /git pull/git reflog
来源:互联网 发布:云计算的部署方式 编辑:程序博客网 时间:2024/06/06 11:47
当你不小心,写错了提交的注视/信息,该如何处理呢。理论上,SCM是不应该修改历史的信息的,提交的注释也是。
不过在Git中,其commit提供了一个--amend参数,可以修改最后一次提交的信息.但是如果你已经push过了,那么其历史最后一次,永远也不能修改了。
我使用git commit --amend已经push过的,截图如下,我那个"fixes #3"永远的在版本历史中了。
git commit --amend
的用法,,,
# git commit --amend
然后在出来的编辑界面,直接编辑 注释的信息。。
==========================================================================================
==========================================================================================
git修改历史提交
git使用amend选项提供了最后一次commit的反悔。但是对于历史提交呢,就必须使用rebase了。
git rebase -i HEAD~3
表示要修改当前版本的倒数第三次状态。
这个命令出来之后,会出来三行东东:
pick:*******
pick:*******
pick:*******
如果你要修改哪个,就把那行的pick改成edit,然后退出。
这时通过git log你可以发现,git的最后一次提交已经变成你选的那个了,这时再使用:
git commit --amend
来对commit进行修改。
修改完了之后,要回来对不对?
使用git rebase --continue
OK,一切都搞定了。
==============================================================
Git修改前一次提交的方法(特别注意保持Change-Id不变)
git rebase -i master~1 //最后一次
git rebase -i master~5 //最后五次
2. // 显示结果如下,修改 pick 为 edit ,并 :wq 保存退出
pick 92b495b 2009-08-08: ×××××××
# Rebase 9ef2b1f..92b495b onto 9ef2b1f
#
# Commands:
# pick = use commit
# edit = use commit, but stop for amending //改上面的 pick 为 edit
# squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
3. 命令行显示:
Rebasing (1/1)
You can amend the commit now, with
git commit --amend
4. 使用 git commit --amend 进行修改,完成后 :wq 退出
5. 使用 git rebase --continue 完成操作
git add <path>表示 add to index only files created or modified and not those deleted
注意:git add <path>的形式把我们<path>添加到索引库中,<path>可以是文件也可以是目录。
git不仅能判断出<path>中,修改(不包括已删除)的文件,还能判断出新添的文件,并把它们的信息添加到索引库中。
git add -u
git add -u 表示 add to index only files modified or deleted and not those created
git add -u [<path>]: 把<path>中所有tracked文件中被修改过或已删除文件的信息添加到索引库。它不会处理untracted的文件。
省略<path>表示.,即当前目录。
git add -A
git add -A: [<path>]表示把<path>中所有tracked文件中被修改过或已删除文件和所有untracted的文件信息添加到索引库。
省略<path>表示.,即当前目录。
git add -i
我们可以通过git add -i [<path>]命令查看<path>中被所有修改过或已删除文件但没有提交的文件,
并通过其revert子命令可以查看<path>中所有untracted的文件,同时进入一个子命令系统。
git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。
1.出现情况的背景:
当你提交的代码后,管理员发现,您的代码不能提交到服务器上,主要原因在于,你的commit 中和服务器中的有些commit不再同一时间轴上,即:你的有些commit要插入到服务器中的某些commit之间,这样就会造成代码的冲突。所以这个时候就要使用Git rebase。
假如,你平时使用的分支叫 new ,然后在这个分支上你刚提交过几个commit。
做法:
1.新建一个分支,并且代码和服务器中代码同步
git checkout origin/v2.0 -b temp
2.为了保证新建的temp分支代码是最新的,可以多执行下面一步
git pull
3.当你新建分支后,系统会自动checkout到temp分支上,此时
git checkout new
4.合并代码,并整理
git rebase temp //会将temp分支的代码合并过来,并按照提交的顺序排序
5. 因为顺序是重新整理的,所以肯定会出现冲突
6.解决冲突,最后 git add * ,但不许要git commit
7.解决后,执行 git rebase --continue
8.重新提交代码: git push for-*
注意:如果要对某些代码的commit重新整理
1. 可以记住某个commit号
2. git rebase -i commit号
3. 会显示一个整理提交的界面,有很多参数,e。p。等等
4.将前面的参数改为e。则wq保存后,系统会自动让你重新修改commit内容
5.修改完成后,再git push for-*
------------------------------------------------------------------------------------------------------------------------------------------------------
git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。它的完整格式稍稍有点复杂。
$ git pull <远程主机名> <远程分支名>:<本地分支名>
比如,取回origin主机的next分支,与本地的master分支合并,需要写成下面这样。
$ git pull origin next:master
如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
$ git pull origin next
上面命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再做git merge。
$ git fetch origin$ git merge origin/next
在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动”追踪”origin/master分支。
Git也允许手动建立追踪关系。
git branch --set-upstream master origin/next
上面命令指定master分支追踪origin/next分支。
如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名。
$ git pull origin
上面命令表示,本地的当前分支自动与对应的origin主机”追踪分支”(remote-tracking branch)进行合并。
如果当前分支只有一个追踪分支,连远程主机名都可以省略。
如果合并需要采用rebase模式,可以使用–rebase选项。
$ git pull --rebase <远程主机名> <远程分支名>:<本地分支名>
-----------------------------------------------------------------------------------------------
git reflog 可以查看所有分支的所有操作记录(包括(包括commit和reset的操作),包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录
- git commit/ git rebase /git pull/git reflog
- git rebase & git pull --rebase
- git reflog
- git reflog
- git reflog
- git#reflog
- git reflog
- git pull --rebase
- git pull --rebase
- git pull —rebase ?
- git pull 和 git pull --rebase
- git pull和git pull -- rebase
- git reflog 恢复删除的commit
- git pull,git clone,git fetch,git rebase
- 差异:git clone , git fetch, git pull和git rebase
- git commit/git commit --amend/git commmit rebase, reset
- git fetch, git pull, git pull -rebase区别
- git fetch, git pull, git pull -rebase区别
- 作业:c++作业3-项目4
- 安装 oracle
- 55. Jump Game
- 安卓端获取IPV4和MAC地址
- C语言回炉(4)
- git commit/ git rebase /git pull/git reflog
- 搭建SQL的web环境
- Retrofit2.0学习之Post请求
- [NOI2014][JZOJ3754][BZOJ3669]魔法森林
- 前端开源项目周报0407
- 测试Or测试开发?
- MicroService 微服务架构模式简介
- POI
- ObjectBox初识与依赖配置