如何强制覆盖本地文件git pull?
方案如下:
这是我得到的错误:
错误:未经跟踪的工作树文件'public/images/icon.gif'将被合并覆盖
如何强制Git覆盖它们?这个人是设计师 - 通常我会手动解决所有冲突,因此服务器具有他们只需要在他们的计算机上更新的最新版本.
请考虑以下情形:
我在自己的Git仓库中开发了一个小型实验项目A. 它现在已经成熟,我希望A成为更大的项目B的一部分,它有自己的大型存储库.我现在想添加A作为B的子目录.
如何将A合并到B中,而不会丢失任何一方的历史记录?
我创建了新的分支master:
git checkout -b testbranch
我做了20次提交.
现在我要压缩那20个提交.我这样做:
git rebase -i HEAD~20
如果我不知道有多少提交怎么办?有什么方法可以做以下事情:
git rebase -i all on this branch
假设我的设置看起来很像
phd/code/
phd/figures/
phd/thesis/
Run Code Online (Sandbox Code Playgroud)
由于历史原因,这些都有自己的git存储库.但我想将它们合并为一个,以简化一些事情.例如,现在我可能会进行两组更改,并且必须执行类似的操作
cd phd/code
git commit
cd ../figures
git commit
Run Code Online (Sandbox Code Playgroud)
表演(现在)很棒
cd phd
git commit
Run Code Online (Sandbox Code Playgroud)
似乎有几种方法可以使用子模块或从我的子存储库中提取,但这比我正在寻找的要复杂一些.至少,我很高兴
cd phd
git init
git add [[everything that's already in my other repositories]]
Run Code Online (Sandbox Code Playgroud)
但这似乎不是一个单行.有什么git可以帮助我吗?
我正在学习git,而且我正在关注Git社区书籍.
以前(很久以前)我在Github上创建了一个公共存储库,包含一些文件.现在我在当前的计算机上设置了一个本地Git存储库,并提交了一些文件.然后我添加了一个指向我的Github页面的遥控器:
[root@osboxes c]# git remote add learnc https://github.com/michaelklachko/Learning-C
Run Code Online (Sandbox Code Playgroud)
这似乎是成功的:
[root@osboxes c]# git remote show learnc
* remote learnc
Fetch URL: https://github.com/michaelklachko/Learning-C
Push URL: https://github.com/michaelklachko/Learning-C
HEAD branch: master
Remote branch:
master tracked
Local ref configured for 'git push':
master pushes to master (local out of date)
Run Code Online (Sandbox Code Playgroud)
现在我想从我的Github repo下载文件到我的电脑.我这样做了:
[root@osboxes c]# git fetch learnc
[root@osboxes c]# git merge learnc/master
warning: refname 'learnc/master' is ambiguous.
Already up-to-date.
Run Code Online (Sandbox Code Playgroud)
但是,我在本地目录中看不到任何新文件.我怎么能得到它们?
我也试过这样做:
[root@osboxes c]# git pull learnc master
From https://github.com/michaelklachko/Learning-C
* branch master -> FETCH_HEAD …Run Code Online (Sandbox Code Playgroud) 我试图使用以下命令仅将一个存储库(比如repo1)的内容移动到另一个现有存储库(比如repo2);
- git clone repo1
- git clone repo2
- cd repo1
- git remote rm origin
- git remote add repo1
- git push
但它不起作用.我回顾了其他类似的帖子,但我只发现移动文件夹而不是内容.
鉴于repo Foo和repo Bar.我想将Bar与Foo合并,但仅限于一个单独的分支,称为baz.
git checkout -b baz <=把Bar repo放在这里.
我有一个名为的存储库Generic,它是一个通用的应用程序.我已将其分叉到一个名为Acme的存储Generic库中,该存储库仅构建在应用程序存储库上,并为其添加了Acme Co品牌.
如果我对核心功能进行了更改Generic,我想Acme使用我对核心功能所做的最新更改来更新存储库Generic.我该怎么办?
据我所知,我基本上试图将上游存储库中所做的更改合并到当前的fork中.
如果它意味着什么,我正在尝试这样做,因为我有一个通用的应用程序,然后我为个人客户构建和品牌(如Acme本例所示).如果有更清洁的方法,请告诉我.
我想在我的工作git存储库中合并一个远程git存储库作为它的子目录.我希望生成的存储库包含两个存储库的合并历史记录,并且合并存储库的每个文件都保留其在远程存储库中的历史记录.我尝试使用如何使用子树合并策略中提到的子树策略,但是在遵循该过程之后,尽管生成的存储库确实包含两个存储库的合并历史记录,但来自远程存储库的单个文件尚未保留其历史记录(任何一个'git log'只显示一条消息"Merged branch ...").
此外,我不想使用子模块,因为我不希望两个组合的git存储库再次分开.
是否可以将远程git存储库合并为另一个存储库作为子目录,来自远程存储库的单个文件保留其历史记录?
非常感谢您的帮助.
编辑:我目前正在尝试使用git filter-branch重写合并的存储库历史记录的解决方案.它似乎确实有效,但我需要再测试一下.我将回来报告我的发现.
编辑2:希望我让自己更清楚我给出了与git的子树策略一起使用的确切命令,这导致远程存储库文件的历史明显丢失.设A是我正在使用的git repo和B git repo我想将它作为它的子目录合并到A中.它做了以下事情:
git remote add -f B <url-of-B>
git merge -s ours --no-commit B/master
git read-tree --prefix=subdir/Iwant/to/put/B/in/ -u B/master
git commit -m "Merge B as subdirectory in subdir/Iwant/to/put/B/in."
Run Code Online (Sandbox Code Playgroud)
在这些命令进入目录subdir/Iwant/to/put/B/in后,我看到B的所有文件,但是git log在其中任何一个文件中只显示提交消息"将子目录合并为子目录/ Iwant/to/put/B /中".它们在B中的文件历史记录丢失了.
什么似乎工作(因为我在混帐初学者我可能是错的)如下:
git remote add -f B <url-of-B>
git checkout -b B_branch B/master # make a local branch following B's master
git filter-branch --index-filter \
'git ls-files -s | sed …Run Code Online (Sandbox Code Playgroud) 我git rebase最近开始使用,并不是100%肯定我做得对.为了这个问题,原点有两个分支,master并且next分支来自master.
自上次两者同步以来,master有2次提交和next6次:
$ git log --oneline origin/next..origin/master
59b5552 master commit #2
485a811 master commit #1
$ git log --oneline origin/master..origin/next
4ebf401 next commit #6
e9b6586 next commit #5
197ada0 next commit #4
4a2c3c6 next commit #3
040a055 next commit #2
84537bf next commit #1
Run Code Online (Sandbox Code Playgroud)
当我结账next并执行时git rebase -i origin/master,我得到以下内容:
$ git status
# On branch next
# Your branch and 'origin/next' have diverged,
# …Run Code Online (Sandbox Code Playgroud) git ×10
repository ×3
git-fetch ×2
git-pull ×2
merge ×2
dvcs ×1
git-rebase ×1
git-subtree ×1
github ×1
migrate ×1
overwrite ×1