有时候,尤其是 当我是唯一一个在远程存储库上工作的人时,我喜欢用git rebase -i和重写历史git push origin master -f.
如何在git pull origin master没有合并的情况下强制执行?我尝试了-f选项,但是没有用.我只想重写我本地git仓库的历史记录以匹配远程(原点)的历史记录.
我只是想拉.我有更改无视,我的Gemfile和Gemlock文件,我很乐意只是覆盖它们而只是拉.我试着把我的变化藏起来,这对我来说没有用.我该怎么办?
git pull
M Gemfile
U Gemfile.lock
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>'
as appropriate to mark resolution, or use 'git commit -a'.
~/projects/sms/apps2/apps2_admin(apps2)$ git stash save "saved"
Gemfile.lock: needs merge
Gemfile.lock: needs merge
Gemfile.lock: unmerged (4ea16799dba7bfe1db28adecf36dee1af5195c1a)
Gemfile.lock: unmerged (e77439c9f86d1d0eda7ae0787e3e158f90959e68)
Gemfile.lock: unmerged (d690d3860db1aa8e46c1bb2f4de3e52a297b5c26)
fatal: git-write-tree: error building trees
Cannot save the current index state
~/projects/sms/apps2/apps2_admin(apps2)$ git pull
M Gemfile
U Gemfile.lock
Pull is …Run Code Online (Sandbox Code Playgroud) 我从我的分店拉出来:
git checkout mybranchSample
git fetch
git pull origin master
Run Code Online (Sandbox Code Playgroud)
然后,Git给了我以下消息:
请输入提交消息以解释为何需要此合并,
特别是如果它将更新的上游合并到主题分支中
输入提交消息后,它会合并master到我的文件中.即使我没有处理过某些文件master,它也会在我输入时以绿色显示文件列表git status.
这个问题不是我的同事发生的,而是我.这背后的原因是什么?
说我现在的分支是myfeature.我想让大师了解最新动态.git merge git pull据我所知,两者总是合并到当前分支.
有没有办法将更改从远程分支(例如,origin/master)合并到我当前不在的分支(master)?我可以想到一个方法:
git stash
git checkout master
git pull origin/master
git checkout myfeature
git stash apply
Run Code Online (Sandbox Code Playgroud)
还有更好的吗?
(这可能是我的整个问题是错误的:git fetch如果启用了远程跟踪,会自动更新master以匹配origin/master吗?)
总结下面的答案,它基本上"只是git merge直接使用,你可能不需要实际做这个合并".
根据文档,git pull执行git fetch然后执行git merge,但是在这种情况下执行git pull origin master应该执行git fetch origin master吗?但是,它似乎没有这样做.这是一个例子.
假设我的远程源主站(在我的情况下在GitHub上)具有以下历史:
commit 1111111 : my first commit
commit 2222222 : a commit from someone else
Run Code Online (Sandbox Code Playgroud)
我只在本地进行了第一次提交作为以下节目
git checkout master
git log --pretty=format:'%h' -n 1
1111111
git checkout origin/master
git log --pretty=format:'%h' -n 1
1111111
Run Code Online (Sandbox Code Playgroud)
从这里开始,我看看结果如下:
git checkout master
git pull origin master
git log --pretty=format:'%h' -n 1
2222222
git checkout origin/master
git log --pretty=format:'%h' -n 1
1111111
Run Code Online (Sandbox Code Playgroud)
可以看出,拉实际上确实使用来自远程源的新提交来更新我的主分支,但是我的本地origin/master仍然是它的位置.强迫我做以下事情
git fetch origin master …Run Code Online (Sandbox Code Playgroud) 我刚刚拉了一个新的分支,做了一些本地的修改,承诺并试图推动.我得到了这个错误:! [rejected] groups -> groups (non-fast forward)
所以我尝试了拉,但被告知Already up-to-date.
这就是我拉动然后推动的东西.
~/dev$ git pull origin groups
Already up-to-date.
~/dev$ git push origin groups
To /mnt/ebs/git/repo.git
! [rejected] groups -> groups (non-fast forward)
error: failed to push some refs to '/mnt/ebs/git/repo.git'
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释这是如何发生的以及如何解决它?
我已将git项目克隆到本地git存储库中.然后我对其中一个文件做了一些令人讨厌的事情,在那恐慌中我从drive(rm style.css)中物理删除了文件,并从git(git rm style.css)中删除了它.
我想style.css从原点回到我的开发分支.不幸的是,我的git认为它是最新的,不会做任何事情.
root@debian:~/project.me# git status
# On branch dev
nothing to commit (working directory clean)
root@debian:~/project.me# git pull origin dev
Password for 'https://someone@github.com':
From https://github.com/somewhere/project.me
* branch dev -> FETCH_HEAD
Already up-to-date.
Run Code Online (Sandbox Code Playgroud)
我需要做些什么来告诉git我想将原始style.css文件下载回我的dev分支?
我是git的新手,并不清楚stashing是如何工作的.
假设我正在分支主服务器上工作并尝试git pull接收错误,即我的本地更改将被覆盖并需要被隐藏或提交.如果我没有上演我的任何更改并运行git stash,那么做一个git pull并成功更新,当我发生了什么git stash apply?
一般来说,如果其他人修改文件并且我运行git pull,那么当我发生时会发生什么run git stash apply?它是否会覆盖刚刚更新的文件,无论它们是否在我存储时被暂存?它是否会覆盖我刚刚更新过的每个文件,git pull以及被隐藏的文件?
我不明白之间的差别git pull --rebase,并git rebase没有任何其他选择.
我不明白他们是安全的,良好的做法,还是非常危险的.
我可以git pull --rebase在当地做一个破坏历史的承诺吗?
git ×10
git-pull ×10
git-stash ×3
git-fetch ×2
git-push ×2
github ×2
gem ×1
git-checkout ×1
git-merge ×1
git-rebase ×1