试图添加git-p<;文件名>;但是git什么都不做
我正在尝试使用,以便应用我所做的一项重大更改。我做了以下工作:试图添加git-p<;文件名>;但是git什么都不做,git,git-commit,git-add,Git,Git Commit,Git Add,我正在尝试使用,以便应用我所做的一项重大更改。我做了以下工作: 1. git pull (before I started working) 2. changed some code 3. git diff > ~/my_diff 4. git stash 5. git pull 6. git stash pop 由于冲突,此操作失败,因此我尝试: 7. cp ~/my_diff ./ 8. git add -p ~/my_diff 但我什么也得不到。。。该文件包含很
1. git pull (before I started working)
2. changed some code
3. git diff > ~/my_diff
4. git stash
5. git pull
6. git stash pop
由于冲突,此操作失败,因此我尝试:
7. cp ~/my_diff ./
8. git add -p ~/my_diff
但我什么也得不到。。。该文件包含很多更改,但由于某些原因,它建议没有大块的补丁。有什么问题
这是git的准确响应:
Your branch is up-to-date with '...'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
my_diff
nothing added to commit but untracked files present (use "git add" to track)
.../trunk $ git add -p my_diff
No changes.
所以您可以看到它是一个格式良好的diff文件要应用my_diff,您应该使用git命令应用补丁,如下所示
git apply mydiff拉之前不必“git diff”,只需隐藏即可。然后拉“藏起来”并修复冲突。Git不会从隐藏中删除您的更改,因此如果您的冲突修复失败,您可以重新开始。您应该在末尾手动清空您的存储空间(仅在冲突的情况下)git add-p不读取补丁文件。相反,它接受一个已经在Git源代码控制下的文件,并将该文件的索引版本与该文件的工作树版本进行比较。不管有什么不同,这就是git add-p让您以交互方式修补索引的原因 因此,您需要将每个修改过的文件保存到某个地方,切换提交,将所有修改过的文件恢复到工作树中,然后运行
git add-p
(完全没有参数)。但这通常是错误的做法,因为它会失去其他人的改变
以下是我的建议,而不是这个顺序,以及原因:
git pull
(在[开始工作]之前)git fetch;git merge
,这样您就可以准确地知道git pull对您做了什么。(有人可能会对你说,但在git-pull
的情况下,它倾向于对你而不是对你。我对git 1.5糟糕的旧时光的体验可能会在这里展示出来。:-git-pull
在某些情况下会严重破坏存储库。)
实际上,我在这里使用了git merge--ff only
,以确保没有发生任何异常情况。(我有一个别名,git-mff
,它运行的是git-merge--ff-only
。有时我会使用一些其他技巧,但现在已经足够了。)
git diff>~/my\u diff
git add
和git commit
。如果在步骤2中做了很多更改,可以先创建一个新的分支名称:
git checkout -b mostly-ready # or some more suitable name
git add -u # or `.` or `-a` if you prefer
git status # check for unexpected new files, or untracked files
# make any adjustments you like here
git commit
git checkout - # go back to previous branch
git隐藏
git提交
,您已经在某个更合适的分支上进行了提交
git pull
git fetch;git merge
或者,如果您在分支本身而不是分支上进行了提交,git fetch;git rebase
。(您可以运行git pull--rebase
来执行fetch和rebase序列,但我认为最好将这两个步骤分开。)
git隐藏流行音乐
git-rebase
,那么rebase将有合并冲突(如果存在的话),因为它会将提交向前传输。否则,您的提交就在您的分支上基本就绪
,或者您所称的任何分支,现在您可以运行:
git cherry-pick -n mostly-ready
-n
告诉Git不要提交结果。这使您有机会查看它,如果愿意,可以使用git add-p
。如果存在合并冲突,-n
是多余的,因为Git无论如何都无法提交结果。请注意,这里有一个重要的警告:您的一些更改可能已经准备就绪
确切地说,这意味着什么
在这里,重要的是要记住,在Git中,每个文件都有三个副本。让我们举一个名为“代码> Read .txt < /COD>”的文件。三份副本为:
(试试HEAD:README.txt
)。这是文件的提交版本,特别是当前提交中的版本(akagit show HEAD:README.txt
akaHEAD
) 此副本已冻结为提交。在提交中,它是永久的(只要提交存在),并且是100%只读的。它以仅Git的压缩格式存储在内部,有时非常压缩。很少有其他项目能解决这个问题;它基本上是一种只使用Git的格式,因此您必须使用@
或Git show
来获取它Git checkout
。这是工作树版本 这只是一个普通的文件。你可以用它做任何你喜欢的事。Git其实并不太在乎这个副本;Git只是把它放到你的工作树中,这样你就可以访问它并使用它README.txt
。这是索引版本 索引,也称为暂存区,有时也称为缓存,保存着Git确实关心的一个版本,但它是一种特殊的、压缩的、仅限Git的格式。此文件已准备好进行下一次提交,但与冻结的只读提交版本不同,您可以覆盖索引副本 这就是git add所做的::0:README.txt
用工作树版本git add README.txt
覆盖索引版本README.txt
。这是Git告诉您有准备提交的更改的时候。并不是说,:0:README.txt
突然出现在登台区:它一直都在那里。只是现在您在旧的README.txt
之上复制了一个修改后的:0:README.txt
,现在暂存区中的版本与ve不同README.txt
git cherry-pick -n mostly-ready
git reset README.txt
git diff --cached
git diff
git status