我真的不明白如果我检查旧的提交,进行一些修改并使用git commit --amend.
该更改会自动传播到未来的提交吗?它是如何工作的?
我的本地存储库包含以下提交:
A ---- B ---- C ---- D ---- E
\
1 ---- 2
\ /
1.1
Run Code Online (Sandbox Code Playgroud)
字母更改位于远程存储库上。更改 1、1.1 和 2 是我不再需要的本地存储库中的临时更改。当我在 B 上创建一个包含未提交更改的存储时,这些可能是自动创建的;该存储已被删除。我想让历史变得不那么复杂,这就是为什么我想摆脱这些。
我可以通过清除本地存储库并再次克隆远程存储库来清楚地摆脱这些,但这似乎很严厉。我想保留一个不在远程仓库中的本地分支。
从我到目前为止所读到的内容来看,讨论的重点是如何将多个提交压缩为一个。我还没有找到任何关于删除提交对象的信息。我还尝试过“git prune <提交2的哈希值>”,但它没有做任何事情。
如何删除提交对象 1、1.1 和 2?
提前致谢。
当我运行时git commit,索引中的更改将添加到本地存储库中。
但是,之后索引会发生什么情况呢?一些 GUI 工具,例如 Eclipse EGit 显示索引已清除,但这不是误导吗?提交后,索引的内容是否与本地存储库的内容相同?
我想从某个提交开始创建一个新分支。但是,我希望之后提交的所有提交也成为该分支的一部分。
让我们假设这是branch-D所有提交。
> branch-D
commit-A ---- commit-B ---- commit-C ---- commit-D
Run Code Online (Sandbox Code Playgroud)
我想删除所有内容并commit-B创建一个新的branch,让我们命名它branch-C,然后只commit-A继续branch-D
> branch-D
commit-A
> branch-C
commit-B ---- commit-C ---- commit-D
Run Code Online (Sandbox Code Playgroud)
我还没有将任何内容推送到远程存储库。有没有办法做到这一点?
我在为工作找到正确的 git 命令时遇到了一些问题。
我工作的地方目前正在切换源代码控制(TFVC -> Git)。但是,TFVC 中的旧版本仍然需要不时修复错误。
我通过使用一些 PowerShell 脚本创建构建来处理这个问题,以确保我的“tfvc-merge”分支包含这些更改。
所以这就是我之后所做的。
我试着把它画出来。所以基本上,拉取请求中的空提交将在我的绘图中具有 1 和 2 的父项。
我一直在四处寻找,几个小时没有找到正确的方法来做到这一点。因此,如果有一个提示可以为我指明正确的方向,那就太好了。提前致谢。
git 日志场景:
提交1
提交2
提交 3
提交 4
提交 5
提交 6
我需要删除 2-4 之间的提交,使最终的 git 日志为
提交1
提交 5
提交 6
最好的方法是什么?
我一直在本地进行以下操作BranchA:
FileA(错误)git add FileA git commit -m "Modified FileA"所以,FileA是在我本地分支上的本地提交(从不推送到远程)BranchA(也从不推送到远程)。
如何恢复对 FileA 的更改?
更新以及我如何解决它
我从 SourceTree 而不是从 git 撤消了对 FileA 的更改,因为我意识到这对我来说更简单。
为此,在 SourceTree 中,对已提交的文件 FileA 进行 rc >“日志选择...”> 选择上一个提交(在您之前的提交)> rc 并选择“重置为此提交”。那完成了工作,但谢谢大家
我有一个较旧的项目,我修改了许多文件(超过一百个)。删除了几个,重命名了一大堆,删除了很多等等。这批更改中可能有 10 个或更多的提交值得。例如,如何编写提交命令以仅选择那些重命名的文件:
git commit "all renamed files" -m "Renamed files."
我想尽量避免做这样的事情:
git commit file1 file2 file3 -m "Renamed files."
……因为太多了。我也可以提交一个价值 ( git commit folder1 . . .)的文件夹,但不幸的是,文件夹中有一些文件不能提交。
我已经接受了提供的答案,但不得不稍微修改命令:
git status --porcelain | grep -E '^(.R|R.)' | \
cut -b4- | awk '{print $1}' | xargs git commit -m "Bulk renamed files."
Run Code Online (Sandbox Code Playgroud)
这样做的原因是因为运行git status --porcelain | grep -E '^(.R|R.)' | cut -b4-,例如,输出(这里的一条线来证明)source/__init__.py -> site/__init__.py。当我xargs用来运行commit命令时,它不被接受,大概是因为-> . . .零件。所以我awk在这里只选择第一个块,这很好用。谢谢!
我想为我的 git 用户禁用他们可以设置全局用户名和电子邮件的选项。我希望它完全是空的。
现在我遇到了问题,当他们中的一些人设置global user.nameand 时global user.email,所有提交的代码在每个项目中都使用相同的名称。
我怎么解决这个问题?
我必须使用与另一个相同的消息创建一个提交。我认为运行起来很简单的第一件事
git show 7777777777
Run Code Online (Sandbox Code Playgroud)
并从控制台复制消息,但消息很复杂,有多行和空格/制表符。
所以我担心在复制+粘贴过程中我会遗漏任何东西。
是否有命令可以将给定提交的 git 消息复制到剪贴板?
git ×10
git-commit ×10
branch ×1
cherry-pick ×1
commit ×1
egit ×1
git-amend ×1
git-config ×1
regex ×1
rename ×1
revert ×1
staging ×1