Git重置而不是拉

时间:2017-06-07 07:30:39

标签: git version-control git-pull git-reset

在我的场景中,我正在做:

public Dictionary<int, string> CheckUserLogin(UserL User) { var dict = new Dictionary<int, string>(); using (SqlConnection con = new SqlConnection(conexion)) { SqlCommand comObj = new SqlCommand("spLogin", con); comObj.CommandType = CommandType.StoredProcedure; comObj.Parameters.Add(new SqlParameter("@username", User.UserName)); comObj.Parameters.Add(new SqlParameter("@password", User.Password)); con.Open(); using (SqlDataReader reader = command.ExecuteReader()) { // Call Read before accessing data. while (reader.Read()) { dict.Add((int)reader["Id"], reader["Username"]==DBNull.Value ?"": (string)reader["Username"]); } } } return dict; }

紧接着是:

git reset <commit>

根据我对git的理解,这个动作应该成功,并且重新做(快进)我重置的历史。

但是,我得到了: 许多文件都git pull --ff-only,操作失败。

有谁知道为什么它没有像我预期的那样工作?谢谢!

2 个答案:

答案 0 :(得分:1)

git reset只有刚刚添加到索引中的非舞台文件..

reset --hard成功之前,您至少需要pull(如果您确定自己没有任何工作正在进行中)。

  

重新(快进)我重置的历史记录。

不完全是:它将获取然后(git pull --ff-only):

  

拒绝以非零状态合并和退出,除非当前HEAD已经是最新的,或者合并可以解析为快进。

它不会“快进你重置的历史记录”:reset与它无关:如果你以前做过自己的本地提交,那么合并不会是快进,无论是重置还是不重置(除非您重新设置为origin/master,否则将丢失您的本地提交。

答案 1 :(得分:1)

git reset <commit>实际上是执行git reset --mixed <commit> (因为它是默认值)。

您可以选择--mixed--soft--hard个选项:

  

- 软

     

根本不触摸索引文件或工作树(但将头重置为,就像所有模式一样)。这留下了所有   你改变的文件“要提交的更改”,就像git status所说的那样   它

     

- 混合

     

重置索引但不重置工作树(即保留更改的文件但未标记为提交)并报告   没有更新。这是默认操作。如果指定了-N,   删除的路径标记为意图添加。

     

- 很难

     

重置索引和工作树。之后对工作树中跟踪文件的任何更改都将被丢弃。

     

git reset的更多选项,您可以参考git book

根据您的情况,您可以改为使用git reset --hard <commit>