使用git时,如何将确切的工作目录推送到远程?

时间:2009-01-23 04:37:38

标签: git

我有一个远程git repo和一个本地克隆。假设我丢失了我的本地.git目录,随后添加并删除了一些文件到本地工作目录。

在某些时候,我想重新启动本地仓库,将它连接到远程,并最终将我的本地工作目录完全按原样推送到遥控器(也就是说,我想要添加所有/删除的文件在遥控器中相同)

我将如何做到这一点?

这是我目前的解决方案,我不喜欢(并且可能不适用于所有情况)。

git init

git remote add origin [some_url]

git add。 #添加工作目录中的所有文件

git commit -m“添加文件”

(此时,我目前的想法是:

  • 分支,

  • 将遥控器取入其中,

  • 'git diff master branch> my_patch'

  • 将该补丁应用于分支

  • 从分支推送到远程,

  • 拉入主人,

  • 并杀死分支。)

显然,我的想法非常复杂和丑陋。有什么想法吗?

4 个答案:

答案 0 :(得分:9)

这样的事情(假设你是从丢失的.git时刻开始的)?

# Make the current directory a git repository.
# This puts you on a master branch with no commits.
git init

# Add a reference to the remote repository.
git remote add origin urlurlurl

# Fetch the remote refs.
git fetch

# Without touching the working tree, move master branch
# from nowhere onto the remote master.
git reset origin/master

# Stage all changes between the new index and the current tree.
git add -A

# Make a commit of these changes.
git commit -m "New working tree as a patch on remote master"

答案 1 :(得分:3)

我认为没有必要在你的案例中创建一个新分支。这是我的答案: 在当前本地破损的仓库中执行以下操作:

git init
git add .
git commit -m 'add files'  #create the local master branch
git remote add myproj [some_url]
git fetch myproj  
git branch -r  #check the remote branches
git diff master..myproj/master  #view the diffs between your local and remote repos
#now you are sure there is no conflict,
#so you merge the remote to your local master branch
git pull myproj master  
git push myproj  #push your local master branch to remote
#now your upstream and downstream is sync'ed

答案 2 :(得分:1)

这是我目前的解决方案(假设我已经在包含当前文件的目录中,但是没有得到git repo)

git clone -n [git_url] tmp_git_dir
mv tmp_git_dir/.git .
rm -rf tmp_git_dir
git add .
git commit -a -m "commit message"

这看起来更简单,并会根据需要自动添加和删除文件。我认为它也更有效率。

我想知道 - 有没有办法将git repo克隆到当前目录中(基本上我只想在当前目录中使用.git目录,所以我不需要执行mv和rm)?

答案 3 :(得分:0)

很抱歉,如果我误解了你,但我认为你只是想做标准拉动和推动? Have a read of this。 Git会为您处理任何合并,如果有冲突,您可以轻松地对它们进行排序。