A few difficult mistakes, problems with GIT I’ve encountered and how did I solve it?

Tram Ho

git push <remote> :<old_name>

# Push the new branch to remote
git push <remote> <new_name>

# Reset the upstream branch for the new_name local branch
git push <remote> -u <new_name>

2. Khi bạn viết nhầm và muốn thay đổi message của commit vừa tạo

3. Khi lỡ commit và giờ muốn gỡ commit đó

  • Note: Trường hợp sửa dụng git reset --soft HEAD^ trường hợp này rất tốt trong việc muốn gỡ 1 commit nhưng vẫn cần giữ lại nhưng thay đổi của commit đó, mình có thể thêm tiếp những gì muốn muốn thay đổi và tạo một commit mới

Lưu ý nếu đã push lên và người khác đã pull về hay base trên nhánh của bạn thì không nên dùng cách trên mà hãy dùng

nó sẽ tạo một commit xóa những gì bạn đã làm việc trên commit đó.

4. Loại file ra khỏi commit vừa tạo

Nếu bạn muốn bỏ luôn commit vừa tạo sau đó thêm thay đổi và sẽ tạo commit mới sau thì hãy xem note thứ 3

Hoặc bạn có thể làm theo cách này

Có thể bạn chưa biết ORIG_HEAD là gì hãy xem ở đây

Cách trên thì nguy hiểm quá, như này dễ hơn nè =))

5. Khi bạn commit nhầm vào một nhánh khác

Nếu chỉ có 1 commit ta có thể làm theo cách này:

Cách này không tốt ở chỗ ở nhánh commit nhầm vẫn còn commit đó, vì vậy cần mắc công quay lại xóa commit đó. Cách làm thế nào các bạn có thể xem bên trên

Mở rộng hơn

6. Chuyển các commit từ branch này sang branch khác

Vậy với trường hợp thế này thì sao?

->

Trường hợp đã có nhánh đó rồi

Trường hợp muốn cắt 3 commit kia sang nhánh mới

Như phía trên ta sử dụng cherry-pick để chuyển 1 commit vậy ta có thể áp dụng với nhiều commit được không? Tất nhiên là có rồi ta có thể thực hiện n lần cherry-pick cơ mà. Tuy nhiên ai lại làm thủ công thế, vì cherry-pick ta có thể sử dụng ranges(từ phiên bản Git 1.7.2)

Giả sử ta ta có

Thì ta có thể sử dụng

7. Đặt lại author là tên mình khi làm việc trên máy người khác

Ta thêm option author vào commit như sau

Nếu đã nhỡ commit rồi muốn sửa lại thi ta có thể sử dụng

8. Nhỡ tay xóa commit và muốn khôi phục lại

  • Khi bạn nhỡ tay git reset --hard HEAD~1 và phát hiện ngay thì chỉ cần sử dụng ngay git reset --hard [email protected]{1}
  • Còn không thì hãy bình tĩnh xem lịch sử các commit bằng lệnh git reflog
    Sau đó tìm commit muốn phục và khôi phục bằng lệnh git reset --hard <commit_hash>

9. Khi lỡ tay xoá mất branch và muốn lấy lại

Khi bạn đã commit rồi thì chứ yên tâm sẽ chẳng bao giờ có thể mất được code đâu chứ bình tĩnh =))
Đầu tiên hãy xem lại hết lịch sử commit bằng cách git reflog hãy tìm commit bạn đã commit ở branch bạn xóa, sau đó sử dụng git branch <new_branch> <commit_hash> ta có thể thay commit hash bằng [email protected]{n}

10. Sau khi merge mà không tự tin lắm muốn trở lại trước lúc merge

Cách trên cũng áp dụng được với rebase , hoặc không thì ta có lại sử dụng đến git reflog sau đó git reset --head <commit_hash> để tìm lại commit cuối cùng của branch trước khi merge hoặc rebase

  • Trong khi merge hay rebase nếu thấy không ổn hơi nhiều mà chán quá không muốn nữa thì dùng git merge --abort hay git rebase -- abort các bạn nhé.

11. Gộp các commit trong một branch và merge vào một nhánh khác

Ví dụ merge branch issue gồm nhiều commit vào branch master

Lệnh này giống với cái nút merge trong option squash trên github web

12. Khi tạo một nhánh từ nhánh A nhưng đổi ý muốn nhánh đó phải được tạo từ nhánh B

Giả sử nhánh cần tạo là C

Cách 1:
Cách nghĩ tới đầu tiên là xóa nhánh đó đi git branch -d <branch_name> hoặc git branch -D <branch_name>

Sau đó checkout sang nhánh B và tạo nhánh C

Cách 2 nhanh hơn: Ta checkout sang nhánh B sao đó sử dụng git checkout -B <branch_name>

13. Nhỡ pull về mà conflic nhiều quá, fix không nổi nản quá muốn trở lại =))

Sử dụng lệnh pull git pull origin master
Sau đó conflic nhiều muốn trở lại bạn có thể dùng 1 trong 2 lệnh

14. Khi bạn muốn change base

Ta có thể dễ dàng làm việc này với lệnh này

Với ví dụ trên ta sẽ làm thế này

Lệnh này cũng rất hữu dụng khi bạn làm việc khi bạn phải base trên nhánh đang phát triển của một người khác(nhánh A), và nhánh đó sau đó được merge vào 1 nhánh khác (nhánh B), bạn sẽ phải đổi base từ nhánh A sang nhánh B.

Tổng kết

Bài viết mang tính ghi chú và lưu lại những khó khăn cũng như sai lầm và cách giải quyết mình tìm được mong bạn đọc được nếu có cách giải quyết hay hơn hãy comment và chỉ cho mình với nhé. Bài viết sẽ được cập nhật qua nhưng lần mình gặp khó và có những pha ngu người với git =)) hi vọng nó sẽ không dài đến mức không thể kéo hết =))

Certainly, for those who are new to Git, it always feels confusing and difficult to use, accompanied by a series of problems and mistakes with Git that happened when I first started with Git. git too, too many times I rebase lost the code, or when someone base on my branch I changed the history of committing to good luck and good people did not get punched, or while ‘sizzling’ need to ‘re-code in another branch and commit as right, or accidentally delete the branch just created the commit, etc. and so on … but there are mistakes, then I tried to correct and avoid but repeat again, right? . Here are the cases I have ever encountered and the way I solved it, please read and give me better ideas if any:

1. Incorrect branch name

Sometimes naming a place where code code has nothing to do with that branch or misspelling it

What happens when you push on the remote?

2. When you make a mistake and want to change the message of the newly created commit

3. When you miss a commit and now want to remove it

  • Note: In case of using git reset --soft HEAD^ this case is very good in wanting to remove a commit but still needs to keep but the changes of that commit, I can add what I want to change and create one new commit

Note if you have pushed up and others have pulled back or base on your branch, you should not use the above method

It will create a commit that deletes what you were working on.

4. Remove the file from the newly created commit

If you want to always remove the newly created commit and then make changes and make a new commit later, see the 3rd note

Or you can do it this way

You may not know what ORIG_HEAD is. Take a look here

The above way is too dangerous, as this is easier nè =))

5. When you mistakenly commit to another branch

If there is only 1 commit we can do it this way:

This is not a good thing in the wrong commit branch, there is still that commit, so you need to go back and delete that commit. How you can see it above

More open

6. Move commits from branch to branch

So, in a case like this?

->

The case already has that branch

In case you want to cut those 3 commits to a new branch

As above, we use cherry-pick to transfer one commit, so can we apply to multiple commits? Of course, we can do n cherry picking. However, who does it manually, because cherry-pick we can use ranges (from Git version 1.7.2)

Suppose we have

Then we can use

7. Reset author is your name when working on someone else’s computer

We added the option author to commit as follows

If you have missed the commit and want to edit it, you can use it

8. Remember to delete a commit and want to restore it

  • When you git reset --hard HEAD~1 and immediately detect, just use git reset --hard [email protected] {1}
  • Otherwise, calmly view the history of commits with the command git reflog Then find the commit you want to restore and restore with the command git reset --hard <commit_hash>

9. When accidentally delete the branch and want to get back

Once you’ve committed, then rest assured never will lose the code but calm =)) First review the entire commit history by git reflog find the commit you committed in the branch you deleted, then That uses git branch <new_branch> <commit_hash> we can replace the commit hash with [email protected] {n}

10. After merging, you don’t want to go back before you merge

The same applies to rebase, or else we can use git reflog then git reset --head <commit_hash> to find the last commit of branch before merging or rebase

  • While merging or rebase if you find it is not too much, it’s too boring and want to use git merge --abort or git rebase -- abort .

11. Merge commits in one branch and merge into another

For example, merge branch issue consists of many commits into branch master

This command is similar to the merge button in squash option on web github

12. When creating a branch from branch A, but changing the mind that branch must be created from branch B

Assume the branch to be created is C

Method 1: The first thought is to delete that git branch -d <branch_name> go git branch -d <branch_name> or git branch -D <branch_name>

Then checkout to branch B and create branch C

Faster Method 2: I checkout to branch B stars that use git checkout -B <branch_name>

13. If you pull back, conflicting too much, the fix isn’t too frustrating to want to come back =))

Use pull git pull origin master After conflicting many want to return, you can use 1 of 2 commands

14. When you want to change base

You can easily do this with this command

With the above example we will do this

This command is also useful when you work when you have to base on someone else’s developing branch (branch A), and that branch is then merged into another branch (branch B), you will have to change base from branch A to branch B.

summary

The article is notes and notes of difficulties as well as mistakes and how to solve yourself, I hope you can read it if there is a better solution, please comment and show me. The article will be updated over the past few times, but I have a hard time and there are some dumb things with git =)) hope it won’t be too long to pull it all out =))

Share the news now

Source : Viblo