接着再点击 Create pull request 按钮,正式提交 pull request。 额外的信息 我们假定你之前已经完成了基本的教程。附加的信息将提供关于高级Git技术的一些信息。...这是当你感到你已经将本地存储库弄乱并希望重新设置本地存储库时需要做的事情。 如果你想撤销/重置本地提交,请执行以下步骤。...https://github.com/Roshanjossey/first-contributions/blob/master/additional-material/removing-a-file.md 将提交转移到不同的分支...这个文档提供了关于如何将提交转移到另一个分支的信息。...采取这些步骤将提交转移到另一个分支。
命令描述 使用命令 git revert commit_id 能产生一个 与 commit_id 完全相反的提交,即在 log 中会看到一条新的提交 new_commit_id, revert 提交就是删除...场景2:在进行代码 merge 时,也会把 merge 信息产生一次新的提交,而 revert 这次 merge commit 时需要指定 m 参数,以指定 mainline。...命令使用 # 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变 $ git reset [file] # 重置暂存区与工作区,与上一次commit保持一致 $ git reset --...hard # 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变 $ git reset [commit] # 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定...参考 [1] 如何用 Git 优雅回退代码,别搞错了!
重置揭密 在继续了解更专业的工具前,我们先讨论一下 reset 与 checkout。 在你初次遇到的 Git 命令中,这两个是最让人困惑的。...另外两棵树以一种高效但并不直观的方式,将它们的内容存储在 .git文件夹中。 工作目录会将它们解包为实际的文件以便编辑。 你可以把工作目录当做 沙盒。...当检出一个分支时,它会修改 HEAD 指向新的分支引用,将 索引 填充为该次提交的快照,然后将 索引 的内容复制到 工作目录 中。 重置的作用 在以下情景中观察 reset 命令会更有意义。...那么可以运行 git reset --soft HEAD~2 来将 HEAD 分支移动到一个旧一点的提交上(即你想要保留的第一个提交): ? Figure 7-17....reset 会移动 HEAD 分支的指向,而 checkout 只会移动 HEAD 自身来指向另一个分支。
实现这一目的的主要途径则是 git reabse,通常还跟随着一句 git push --force 以用本地历史重写远端历史。...这里要谈论的是如何用rebase、reset 和 commit 来分割既有的提交。...commit,将其前面的 pick 改成 edit 保存并退出 VIM git reset HEAD~ 以重置阶段性的改变 git add [files-to-add] 所有本次需要用到的文件 (此处就是...A) 正常的 git commit -m 一次或多次的将剩余的文件分别提交 git add [other-files-to-add]` git commit git rebase...--continue 以指示分割过程完成并退出变基操作 最后,就可以用 git cherry-pick 将所需的新提交引入我们的分支中了。
用户在本地计算机上拥有自己的仓库,并且包含所有的项目历史记录。用户可以在自己的本地计算机上做任何想要操作,例如提交(commit),历史检查(inspect history),恢复到一个旧的版本等等。...所有其他的版本和分支都被保存在你的本地仓库中,并且随时都可以非常快速地恢复到一个旧的版本。一定要记住 Git 的分布式特性:分支可以被发布到在远程服务器上,但是本地上的分支对于日常的工作更加重要。...在 Git 中,每一个提交必须拥有一个唯一的ID,因此一个哈希字符串就代替了那个依次递增的版本号。 分享工作 在 Subversion 中,在提交之后,你的工作会被自动地转移到中央仓库上去。...利用它独一无二的 “暂存区(staging area)” 概念,Git 可以帮助你打造很细微和精准的提交。你可以准确地判断哪些更改将被包含在你的下一个提交中,即使只是一行改动。...Git 正在被越来越多的知名公司和开源项目所使用,如 RubyOn Rails,jQuery,Perl,Debian,Linux 内核等等。
合并冲突 如果两个分支的修改存在冲突:比如说同时修改了某个文件的同一行;或者一个分支删除了文件,另一个分支则修改了文件——对于这种情况,Git 是无法自行决定合并策略的。...drop:删除提交 以 drop 为例: ?...以 squash 为例: ?...使用 git status 查看,发现当前操作空间空空如也。Git 丢弃了 9e78i 和 035cc 两次提交引入的修改,将仓库重置到 ec5be 时的状态。...Reflog(git reflog) 每个人都会犯错,举一个例子:假设你不小心使用 git reset 命令硬重置仓库到某个提交。后面突然想到,重置导致了一些已有的正常代码的误删!
git rebeae merge 会把公共分支和你当前的commit 合并在一起,形成一个新的 commit 提交 git merge git cherry-pick 对于多分支的代码库,将代码从一个分支转移到另一个分支是常见需求...$ git cherry-pick feature 上面代码表示将feature分支的最近一次提交,转移到当前分支。 Cherry pick 支持一次转移多个提交。...比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四...比如当前的commit是这样的A-1-2-3-4-5-6-7-8,你的第一个提交是1,那么我们执行如下的命令: git reset --soft A // 重置本地分支HEAD指针 git commit...Git stash 临时储藏 当我们在当前分支开发某个需求的时候,遇到了另一个需求的联调问题,需要切换到另一个分支上去解决问题。怎么办?
例如,如果我们重置 master 为当前提交回退两个提交的位置,我们可以使用如下之一的方法: $ git reset 9ef9173 (使用一个绝对的提交 SHA1 值 9ef9173) 或: $ git...如果我们在链中的每个提交中向文件添加一行,一种方法是使用 reset 使那个提交返回到仅有两行的那个版本,如:git reset HEAD~1。...另一个方法是添加一个新的提交去删除第三行,以使最终结束变成两行的版本 —— 实际效果也是取消了那个更改。...当我们以这种方式使用 Git 工作时,我们的基本规则之一是:在你的本地仓库中使用这种方式去更改还没有推送的代码是可以的。...从本质上来说,Git 将一个分支中的每个不同提交尝试“重放”到另一个分支中。
可将一个分支的修改融入到另一个分支的一种方式是执行 git merge。Git 可执行两种类型的合并:fast-forward 和 no-fast-forward。...当我们想要合并的两个分支的同一文件中的同一行代码上有不同的修改,或者一个分支删除了一个文件而另一个分支修改了这个文件时,Git 就不知道如何取舍了。 在这样的情况下,Git 会询问你想要保留哪种选择?...尽管合并冲突往往很让人厌烦,但这是合理的:Git 不应该瞎猜我们想要保留哪些修改。 变基(Rebasing) 我们刚看到可通过执行 git merge 将一个分支的修改应用到另一个分支。...另一种可将一个分支的修改融入到另一个分支的方式是执行 git rebase。 git rebase 会将当前分支的提交复制到指定的分支之上。...比如当合并了另一个分支或你的同事推送了一个快速修复时。 通过在这个远程分支上执行 git fetch,我们就可在本地获取这些修改。
这样就开发者就可以回归到任何一个时间点的某一个旧的版本(对于SVN,没修改一次文件,SVN就会创建一个叫做版本的概念,是从0 开始自增的序列)。...虽然平时大家都是将代码提交到中央服务器上再统一pull别人的代码,但实际情况你可以总是pull张三的库,然后push给李四等等操作。 本地提交: 本地提交好处主要有3点: 一, 断网提交 。...[file] # 恢复暂存区当前目录的所有文件到工作区 $ git checkout . # 恢复工作区到指定 commit $ git checkout [commit] # 重置暂存区的指定文件,...与上一次 commit 保持一致,但工作区不变 $ git reset [file] # 重置暂存区与工作区,与上一次 commit 保持一致 $ git reset --hard # 重置当前分支的指针为指定...commit,同时重置暂存区,但工作区不变 $ git reset [commit] # 重置当前分支的HEAD为指定 commit,同时重置暂存区和工作区,与指定 commit 一致 $ git reset
可将一个分支的修改融入到另一个分支的一种方式是执行 git merge。Git 可执行两种类型的合并:fast-forward 和 no-fast-forward。...当我们想要合并的两个分支的同一文件中的同一行代码上有不同的修改,或者一个分支删除了一个文件而另一个分支修改了这个文件时,Git 就不知道如何取舍了。 在这样的情况下,Git 会询问你想要保留哪种选择?...另一种可将一个分支的修改融入到另一个分支的方式是执行 git rebase。 git rebase 会将当前分支的提交复制到指定的分支之上。 ?...硬重置 有时候我们并不想保留特定提交引入的修改。不同于软重置,我们应该再也无需访问它们。Git 应该直接将整体状态直接重置到特定提交之前的状态:这甚至包括你在工作目录中和暂存文件上的修改。 ?...比如当合并了另一个分支或你的同事推送了一个快速修复时。 通过在这个远程分支上执行 git fetch,我们就可在本地获取这些修改。
git三区 工作区:写代码的地方 暂存区:临时存储 git add …的地方 本地库 :git commit 的地方 远程库:远程仓库 创建一个版本库 初始化仓库 git init 2.设置提交信息 git...分支名 将服务器代码下载下来相对于 svn的checkout git log 打印完整格式提交日志 git log --pretty=oneline 一行查看(展示完整hash值) git...重置暂存区 --hard 在本地库移动HEAD指针 重置暂存区 重置工作区 git branch 查看分支 git branch 分支名称 建立分支 git checkout...分支名称 切换分支 git merge 分支名 将当前分支与另一个分支合并 git branch -d 分支名 删除本地分支 git remote add 别名(origin ) 地址...如 #下面是忽略的文件/文件名 .env vendor/ storage/ #通配忽略 doc/2.txt abc/*.txt test/ *.tmp 提交时不会提交这里面的文件/目录
git log --follow my_script.py 显示一个分支上的提交,而不显示另一个分支上的提交。这将显示在a-branch上而非b-branch上提交。...git log a-branch..b-branch 查看引用日志(reflog)以查看分支和其他引用的提示何时在存储库中最后更新。...git reflog 通过其提交字符串或哈希以更易于阅读的格式显示Git中的任何对象。 git show de754f5 显示更改 该git diff命令显示提交,分支等之间的更改。...git rebase upstream/master 重置 有时,包括在rebase之后,您需要重置您的工作树。您可以使用以下命令重置为特定提交,并删除所有更改。...git push --force origin master 要从Git目录中删除本地未跟踪文件和子目录以获得干净的工作分支,您可以使用git clean。
对于多分支的代码库,将代码从一个分支转移到另一个分支是常见需求。 这时分两种情况。一种情况是,你需要另一个分支的所有代码变动,那么就采用合并(git merge)。...$ git cherry-pick 上面命令就会将指定的提交commitHash,应用于当前分支。这会在当前分支产生一个新的提交,当然它们的哈希值会不一样。...git cherry-pick命令的参数,不一定是提交的哈希值,分支名也是可以的,表示转移该分支的最新提交。...$ git cherry-pick feature 上面代码表示将feature分支的最近一次提交,转移到当前分支。 二、转移多个提交 Cherry pick 支持一次转移多个提交。...(3)--quit 发生代码冲突后,退出 Cherry pick,但是不回到操作前的样子。 五、转移到另一个代码库 Cherry pick 也支持转移另一个代码库的提交,方法是先将该库加为远程仓库。
(master)$ git reflog 你将会看到一个你过去提交 (commit) 的列表,和一个重置的提交。...-on-scroll 这会告诉你在一个分支里有而另一个分支没有的所有提交 (commit), 和分支之间不共享的提交 (commit) 的列表。...(即 upstream repository,上游仓库)所有内容,如分支、Tag、提交。...代码托管服务(如 Github、BitBucket)提供了方便的完成 Fork 操作的功能(在仓库页面点一下 Fork 按钮)。...那里,还有一个硬重置 (hard reset) 到一个较旧的提交。最新的动作出现在最上面以 HEAD@{0} 标识.
HEAD 中的代码 git revert {sha1} 创建一个撤消特定提交的新提交...(sha1) git revert HEAD 创建一个新的提交撤消上一次提交...撤消最后一次提交,保留工作目录上的更改 git reset HEAD~1 --hard 撤消最后一次提交,...从另一个存储库(.git/FETCH_HEAD)下载对象和引用 git pull {alias} [master] 从另一个存储库中获取并与主库合并...创建并更改到新的本地分支 git checkout {branch} 更改到另一个现有分支
# 重置未提交文件修改 git checkout src/xxx.js # 重置未提交文件夹 git checkout src/xxx/ # 查看所有分支 git branch -a # 切换分支...git show [commit] 非常用,但必须掌握的命令 # 以当前所在分支代码为基础,创建一个新分支 git checkout -b feature_1_3_1 # 将当前分支推送到远程 git...git fetch origin --prune # 合并某分支到当前分支 git merge feature_1_3_0 # 重置到最近一次提交的代码 # 不会删除你新添加的文件 git reset...--hard # 重置到某次提交的代码 # 可以从新往旧恢复,可以从旧恢复到新 git reset [commit] git 命令很多,也不容易记忆,善用 ctrl + r 快捷键,可以在命令行中进行历史命令搜索...但在 windows 上 ssh 秘钥需要配置并长期开启一个软件(IDE 另说),因此,我们可以通过另一个方式来实现无密码操作。
撤销上次git add) $ git reset HEAD # 将HEAD重置到上一次提交的版本,并将之后的修改标记为未添加到缓存区的修改 $ git reset # 将HEAD重置到上一次提交的版本...(master)$ git reflog 你将会看到一个你过去提交(commit)的列表, 和一个重置的提交。...一般情况下你不关心提交(commit)的时间戳,只想组合 所有 提交(commit) 到一个单独的里面, 然后重置(reset)重提交(recommit)。...这会告诉你在一个分支里有而另一个分支没有的所有提交(commit), 和分支之间不共享的提交(commit)的列表。...那里,还有一个硬重置(hard reset)到一个较旧的提交。最新的动作出现在最上面以 HEAD@{0}标识.
当前工作分支,注意非远程) 获取–fetch or pull fetch 从另一个存储库下载对象和引用。.../refs/heads/master e695606fc5e31b2ff9038a48a3d363f4c21a3d86 reset 重置命令git reset 的一个用途就是修改引用(如master)的游标...注意: 使用重置命令很危险,会彻底的丢弃历史。那么还能够通过浏览提交历史的办法找到丢弃的提交ID,再使用重置命令恢复历史么?不可能!因为重置让提交历史也改变了。在一个共享的仓库中这会造成问题的。...的commit revert merge commit 这时需要添加 -m 选项以代表这次 revert 的是一个 merge commit,-m 选项接收的参数是一个数字,数字取值为 1 和 2,也就是...这和上一章的重置命令大不相同:重置的默认值是 HEAD,而检出的默认值是暂存区。
由于篇幅原因,有兴趣的可以在了解下交互式变基,交互式变基修改commit,如commit的合并、顺序调整、commit的提交日志修改。 4. 重置(reset) 撤销变更方式有两种。...,这个部分这篇文章小姐姐用动画图解Git讲的相对好一些 4.1 软重置 最大的特点:撤回到特定提交之后,已有的修改会保留 以下图为例:9e78i 提交添加了 style.css 文件,035cc 提交添加了...使用 git status 查看,发现当前操作空间空空如也。Git 丢弃了 9e78i 和 035cc 两次提交引入的修改,将仓库重置到 ec5be 时的状态 5....包括合并、重置、还原:基本上记录了对分支的任何更 使用场景:假设你不小心使用 git reset 命令硬重置仓库到某个提交。后面突然想到,重置导致了一些已有的正常代码的误删 ?...为一个,这时候就可以用squash merge把某个分支上的所有提交都合并成一个提交 git merge --squash 分支名
领取专属 10元无门槛券
手把手带您无忧上云