git - Nhánh của bạn đi trước 'origin / master' 1 lần cam kết


107

Tôi là người mới sử dụng git và tôi đang làm việc trên git.

Tôi đã thêm một số tệp trong git:

git add <file1>
git add <file2>

sau đó tôi muốn đẩy nó để xem xét, nhưng tôi đã nhầm lẫn

git commit

vì vậy các tệp mà tôi đã thay đổi sẽ không được xem xét.
Bây giờ nếu tôi nhập lệnh:

git status

nó nói rằng

# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)

Tôi muốn hoàn nguyên cam kết đó và tôi muốn đẩy các tệp đó để xem xét thay vì cam kết. Bất cứ ai có thể cho tôi biết làm thế nào tôi có thể làm điều đó?


Nếu bạn muốn hoàn tác cam kết của mình - hãy xem câu hỏi tương tự .
ДМИТРИЙ МАЛИКОВ

1
Tôi không biết bạn đang sử dụng gì để đánh giá mã. Câu trả lời đơn giản cho câu hỏi đơn giản về cách để bỏ cam kết làgit reset HEAD^
Anonymoose

tôi đã đặt lại HEAD. nhưng sau đó khi tôi cố gắng đẩy, sau đó nó cho tôi biết D file1.py khi tôi cố gắng psuh thì một lần nữa nó lại cho tôi biết rằng nhánh của bạn đi trước điểm gốc / chủ bằng 1 lần cam kết
sam

Ý bạn là gì khi bạn nói "Tôi muốn đẩy các tệp đó đi xem xét"? Bạn có muốn người khác nhìn thấy cam kết của bạn không?
Jake Greene

mã của tôi sẽ được xem xét đầu tiên và sau đó nó sẽ được cam kết. vì vậy trước tiên tôi muốn đẩy mã để xem xét nhưng nhầm lẫn tôi đã cam kết
sam

Câu trả lời:


128

Bạn không thể đẩy bất cứ điều gì chưa được cam kết. Thứ tự hoạt động là:

  1. Thực hiện thay đổi của bạn.
  2. git add - giai đoạn này thay đổi của bạn để cam kết
  3. git commit - điều này cam kết cục bộ các thay đổi theo giai đoạn của bạn
  4. git push - điều này đẩy các thay đổi đã cam kết của bạn sang một điều khiển từ xa

Nếu bạn thúc đẩy mà không cam kết, không có gì được đẩy. Nếu bạn cam kết mà không thêm, không có gì được cam kết. Nếu bạn thêm mà không cam kết, không có gì xảy ra cả, git chỉ ghi nhớ rằng những thay đổi bạn đã thêm nên được xem xét cho lần cam kết sau.

Thông báo bạn đang thấy (chi nhánh của bạn đi trước 1 lần cam kết) có nghĩa là kho lưu trữ cục bộ của bạn có một bản cam kết chưa được đẩy.

Nói cách khác: addcommitlà các hoạt động cục bộ push, pullfetchlà các hoạt động tương tác với một điều khiển từ xa.

Vì dường như có một quy trình kiểm soát nguồn chính thức tại nơi bạn làm việc, bạn nên hỏi nội bộ về cách xử lý điều này.


4
aha ok. vì vậy nó có nghĩa là sau khi cam kết, tôi phải thúc đẩy nó
sam

4
Giải thích tốt - người hỏi có thể không muốn thực sự hoàn nguyên cam kết, nhưng thay vào đó, yêu cầu mọi người xem lại cam kết trước khi đẩy nó vào originkho lưu trữ. Tôi cũng khuyên bạn nên đọc một vài hướng dẫn / phần giới thiệu về git trên git-scm.com/documentation
dbr

1
Khi trạng thái git của tôi cho biết "Chi nhánh của bạn đi trước 'origin / development' 1 lần cam kết." làm cách nào để xem chính xác các tệp đó đã được thay đổi? git diff dường như không làm được gì
Tom

Đôi khi là ai đó khác đã làm việc ở đó. Thực hiện một kéo trước khi đẩy bạn
Adrian P.

67

git reset HEAD^ --soft (Lưu các thay đổi của bạn, quay lại lần cam kết cuối cùng)

git reset HEAD^ --hard (Bỏ các thay đổi, quay lại lần cam kết cuối cùng)


3
Ý nghĩa của ĐẦU với củ cà rốt '^' là gì? Tôi đã thấy nó được viết mà không có củ cà rốt.
Mugen

29

Nếu bạn chỉ muốn loại bỏ các thay đổi và hoàn nguyên về lần cam kết cuối cùng (lần bạn muốn chia sẻ):

git reset --hard HEAD~

Bạn có thể muốn kiểm tra để chắc chắn rằng bạn muốn điều này ( git log), vì bạn sẽ mất tất cả các thay đổi.

Một giải pháp thay thế an toàn hơn là chạy

git reset --soft HEAD~ # reset to the last commit
git stash              # stash all the changes in the working tree 
git push               # push changes 
git stash pop          # get your changes back 

21

Tôi đã giải quyết vấn đề này bằng cách chạy đơn giản:

git pull

Chỉ có bấy nhiêu thôi. Bây giờ nó đang hiển thị:

# On branch master
nothing to commit, working directory clean

Nó có thể gây ra sự cố nếu có nhiều hơn một nhánh được tạo không bắt buộc.
Anil Kumar Arya

1
bạn đã trở lại trạng thái xa xôi của mình và mất tác phẩm cuối cùng của bạn: D
Gucho Ca

13

git đặt lại HEAD ^

thì các tệp đã sửa đổi sẽ hiển thị.

Bạn có thể di chuyển các tệp đã sửa đổi vào một nhánh mới

sử dụng,

git checkout -b newbranch

git checkout commit -m "files modified"

git push origin newbranch

git checkout master

thì bạn sẽ ở trên một nhánh sạch và các thay đổi của bạn sẽ được lưu trữ trong newbranch. Sau đó, bạn có thể hợp nhất thay đổi này vào nhánh chính


4
git reset HEAD <file1> <file2> ...

xóa các tệp được chỉ định khỏi lần cam kết tiếp theo

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.