logo

Đang load dữ liệu

logo devmaster

VIỆN CÔNG NGHỆ VÀ ĐÀO TẠO DEVMASTER

Đào tạo - Phần mềm - Cho thuê nhân sự

  • 0969.609.003
  • 0978.611.889
  • Trang chủ
  • Các khoá đào tạo
    • Chuyên đề WEB - PHP

      • Lập trình web với HTML5 - CSS3- JQuery - Bootstrap - Ajax - [36 giờ]
      • Lập trình web frontend - reactjs - [75 giờ]
      • Lập trình web với mã nguồn mở PHP&MYSQL - PHP FRAMEWORK [126 giờ]

      Chuyên đề Mobile

      • Lập trình Games/Apps trên nền tảng Android - [120 giờ]
      • Lập trình Games/Apps trên nền tảng IOS - [120 giờ]

      Chuyên đề JAVA

      • Ngôn ngữ lập trình hướng đối tượng với java - [40 giờ]
      • Lập trình ứng dụng với java - [100 giờ]
      • Lập trình web site với java framework (JPA, HIBERNATE, SPRING MVC, SPRINGBOOT) - [276 giờ]

      Chuyên đề NETWORK/SECURITY

      • Khoá học Quản trị hạ tầng mạng CCNA v6 - [72 giờ]
      • Khoá học quản trị hệ thống với Windows SERVER 2012- [72 giờ]
      • Chuyên gia bảo mật hệ thống CompTIA + - [110 giờ]

      Chuyên đề .NET

      • Nền tảng lập trình hướng đối tượng với C# - [40 giờ]
      • Lập trình ứng dụng WINDOWS FORM - [100 giờ]
      • Lập trình Web với ASP.NET MVC 5, WebAPI - [145 giờ]

      Chuyên đề khác

      • Ngôn ngũ lập trình C/C++ - [80 giờ]
  • Lập trình cho trẻ em
  • Dịch vụ
    • Đào tạo theo như cầu
    • Cung cấp thiết bị - Phần mềm
    • Tư vấn - Thiết kế mạng hạ tầng
    • Tư vấn - Triển khai dịch vụ mạng
    • Tư vấn - Tư vấn, triển khai giám sát hệ thống
    • Thực tập dự án
  • Lịch khai giảng
  • Tin tức
    • Tin tức và sự kiện
    • Tin hoạt động
    • Tin công nghệ
    • Hội thảo, workshop, Codecam
    • Thông tin việc làm
    • Cẩm nang chia sẻ kiến thức
  • Tiện ích
  • Liên hệ

Tin công nghệ

Sep - 2018

11

Git không có gì đáng sợ cả!

Tin công nghệ

Trong bài viết này mình muốn chia sẻ một ít kinh nghiệm về những vấn đề gặp phải khi thao tác với GIT Bắt đầu thôi nào (go) !!

Lỗi mất code

Vấn đề gặp phải (TT)

Nhiều bạn có thể gặp trường hợp khi dùng một số thao tác với git như git reset, git gì gì đólàm cho mất commit ở nhánh hiện tại. Ví dụ như trong trường hợp này : Mình mới commit xong, git log --oneline sẽ ra như thế này:

Commit đã đủ, chuẩn bị nộp bài thôi

Nhưng sau khi đi vệ sinh một chút thì có thằng bạn nghịch dại và khi git log --oneline lại thì nó như thế này:

Bị troll rồi

Việc đầu tiên mình làm cho thằng bạn đó một trận rồi mở các bí kíp về git ra xem có khôi phục lại được code không?? (TT) Sau khi tìm hiểu thì mình đã biết được, một khi đã commit rồi thì sẽ không bị mất code nữa Khi commit thì github sẽ lưu lại commit, kể cả khi xóa nhánh chứa commit đó thì cũng không bị mất (Đây là một câu hỏi trong phỏng vẫn đó, bạn nào chưa biết thì lưu lại nhé, ắt sẽ có lúc dùng =))) Bạn có thể tưởng tượng là commit giống như những gói tin, còn branch có nhiệm vụ xâu chuỗi các gói tin đó theo một trật tự nhất định

Xử lý thôi !!

Đầu tiên, hãy xem lịch sử thay đổi github local của bạn bằng git reflog hoặc git reflog | grep some_thing, phần some_thing sẽ là những gì liên quan đến commit mà bạn muốn xem ví dụ như mã ticket.

Đây là lịch sử thay đổi commit

Copy phần commit_hash(mã commit) bạn muốn quay trở lại; trong trường hợp này là mã abe794a có commit Fixed #013.

Trong trường hợp này là mã abe794a của commit fix bug #013

Cuối cùng kết liễu bằng lệnh git reset --hard commit_hash, sử dụng git log --oneline để kiểm tra kết quả nhé. git reset --hard abe794a

Tèn tén ten, vừa được đấm thằng bạn, vừa bá git =))

Tèn tén ten, kết quả cuối cùng là vừa được đấm thằng bạn, vừa bá git.

Chuyển nhánh base

Vấn đề gặp phải (TT)

Bạn đã bao giờ gặp trường hợp ticket của mình đang trong phiên bản ví dụ như tháng 12, nhưng do spec của khách hàng thay đổi nên đấy sang version tháng 1,…. Và khi base với nhánh tháng 1 thì có chuyện xảy ra (TT). Khi base với nhánh branch_122017

Khi base với nhánh branch_012018 Do có quá nhiều commit không trùng nhau nên (TT)

Sơ đồ mô tả:

Xử lý thôi !!

Tư tưởng của việc này là chuyển commit của bạn sang base với một nhánh mới. Thật ra số commit bị conflict kia phần lớn là của 2 nhánh base bị conflict với nhau; việc cần làm bây giờ là chuyển commit của bạn lên trên cùng của nhánh base mới Trong trường hợp này, mình có 2 cách giải quyết. Nhưng trước hết, bạn phải lưu lại commit_hash cần chèn vào đã đã, nó là 9e05cab

Cách 1: Sử dụng branch hiện tại

  • Tại branch hiện tại, mình reset --hard về commit cũ cũ từ ngày trước, commit này là commit chung của cả 2 nhánh mà bạn muốn thay đổi. Nhìn trên hình đó là commit c1664c2hoặc có thể cũ hơn . git reset --hard c1664c2

  • Sử dụng rebase như bình thường, lúc này nhánh của bạn đã chuyển base từ branch tháng 12 sang tháng 1 rồi. Vì checkout về commit chung nên sẽ không bị conflict về code giữa hai 2 nhánh. git rebase branch_0118

  • Tiếp theo bạn sử dụng lệnh cherry-pick commit_hash để lấy commit đó. git cherry-pick 9e05cab

  • git log --oneline xem

  • Cuối cùng, bạn push -f lại lên github là OK

Cách 2: Sử dụng nhánh mới trùng tên

  • Xóa nhánh có commit hiện tại đi. git branch -D branch_name. git branch -D fix_021

  • Bạn checkout về nhánh muốn base (branch_012018), tạo một nhánh mới trùng tên với branch vừa xóa. git checkout -b branch_name. git checkout -b fix_021

  • Sử dụng cherry-pick như cách 1 cherry-pick commit_hash. git cherry-pick 9e05cab

  • Kiểm tra bằng git log --oneline

  • Cuối cùng, bạn push -f lên là lại OK ngay

Tổng hợp commit

Vấn đề gặp phải (TT)

Bạn lại có khi nào gặp trường hợp khi pull của mình có nhiều hơn 1 commit, mà đại ca leader yêu cầu chỉ được 1 pull 1 commit (TT), vào lúc đó “người nông dân” biết phải làm sao ???

git log --oneline

Xử lý thôi !!

Sau khi ôn luyện vài khóa mastering GIT (len) thì có 2 cách để giải quyết

Cách 1: Sử dụng rebase -i

Đầu tiên, sử dụng git rebase -i HEAD~n cũng với n là số commit bạn muốn tổng hợp, trong trương hợp này n = 3.

Sau đó đổi pick thành s với s là squash:

Sau khi save lại sẽ hiển thị cửa sổ tên commit

Tiếp theo bạn chỉ việc thêm dấu # vào trước commit bạn không muốn giữ tên, save lại

Kiểm tra lại bằng git log --oneline

push -frồi kiểm tra lại trên github

Very ez =))

Cách 2: Sử dụng reset Sử dụng git reset --soft HEAD~n với n là số commit bạn muốn tổng hợp (n = 3), kiểm tra lại bằng git log --oneline

 

 

 

 

 

 

Kiểm tra trạng thái git status, file thay đổi đã nằm trong staging

Sau đó bạn chỉ việc git commit -m "commit name" lại là được. Commit này là commit mới của branch, không liên quan gì đến các commit trước Kiểm tra bằng git log --oneline tiếp nào

Dùng push -f rồi kiểm tra trên github thi sao ??

BÁ RỒI (y) Nhìn 2 cách trên thì bạn có thể thấy là cách nào nhanh hơn rồi đấy, mình thì minh chọn cách 1 =))

Một số câu lệnh thông dụng khác

  • commit --amend: nạp chồng commit sau lên commit trước (Dùng để đổi tên commit)
  • git stash: lưu việc đang làm vào 1 stash, khi cần lấy ra dùng lệnh git stash pop
  • git diff: kiểm tra sự thay đổi so với commit trước (kiểm tra khi chưa commit)
  • git show: kiểm tra sư thay đổi so với commit trước (kiểm tra sau khi commit mới)
  • git checkout -f: loại bỏ các file đã thay đổi, giống như git stash nhưng sẽ không lưu vào đâu
  • git blame file_name: kiểm tra người cuối cùng đã thay đổi trong file theo từng dòng
  • git config --list: kiểm tra thông tin local của người dùng

Có thể tham khảo thêm ở Đến cả con khỉ cũng biết GIT

Một số lưu ý khi sử dụng GIT

  • Nên bắt đầu làm việc bằng việc pull code mới ở nhánh tổng, và rebase ở nhánh checkout để không bị conflict code
  • Nên làm một pull với một commit: Ý mình là trước khi được merge pull. Vì có project sẽ yêu cầu bạn mỗi lần đẩy lại pull phải một commit mới để theo dõi được sự thay đổi của commit trước và commit sau của bạn. Khi pull đã được appprove thì bạn có hãy sử dụng 2 cách tổng hợp commit trên của mình để trở thành 1 pull nhé
  • Gợi ý cách đặt tên commit: Nên bắt đầu với các tiền tố chỉ chức năng của pull đó, giống như là pull fix bug thì nên đặt tên bắt đầu là Bug..., Fixed ... hoặc làm tính năng mới thì Task ..., Feature...; còn tiếp theo là mã ticket, cuối cùng là nội dung chỉnh sửa -> Giúp quản lý pull về sau dễ dàng hơn khi sử dụng git log --oneline sẽ theo dõi được sự thay đổi cũng như nội dung thay đổi

Nguồn: DEVMASTER sưu tầm từ internet via Viblo

Các bài viết cùng chủ đề

Việt Nam khả năng thiếu 150.000 đến 200.000 nhân sự IT mỗi năm
Việt Nam khả năng thiếu 150.000 đến 200.000 nhân s...
Tổng quan ngành khoa học máy tính
Tổng quan ngành khoa học máy tính
8 xu thế công nghệ đáng chú ý nhất trong năm 2021
8 xu thế công nghệ đáng chú ý nhất trong năm 2021...
Tìm hiểu về API? Tại sao API lại được trọng dụng!
Tìm hiểu về API? Tại sao API lại được trọng dụng!...
Học ngôn ngữ lập trình nào để bắt kịp xu thế công nghệ năm 2021
Học ngôn ngữ lập trình nào để bắt kịp xu thế công ...
Nên làm việc ở công ty Product hay công ty Outsourcing?
Nên làm việc ở công ty Product hay công ty Outsour...

Các khóa đào tạo chuyên đề

Thiết kế và lập trình Website PHP, Laravel chuyên nghiệp - FullStack
Thiết kế và lập trình Website PHP, Laravel chuyên nghiệp - FullStack
Lập trình ứng dụng trên nền tảng android Lập trình ứng dụng trên nền tảng android
Lập trình Ứng dụng với Công nghệ ASP.NET Core MVC, WebAPI, ReactJS - FullStack

Lập trình Ứng dụng với Công nghệ ASP.NET Core MVC, WebAPI, ReactJS - FullStack
Lập trình ứng dụng với WINDOWS FORM Lập trình ứng dụng với WINDOWS FORM
Lập trình ứng dụng với JAVA (FORM) Lập trình ứng dụng với JAVA (FORM)
Thiết kế và lập trình Ứng dụng với công nghệ Java (Java Framework springBoot, hibernate,...) - FullStack
Thiết kế và lập trình Ứng dụng với công nghệ Java (Java Framework springBoot, hibernate,...) - FullStack
Thiết kế và lập trình website với công nghệ HTML5, CSS3, Javascript, Bootstrapt 4, Jquery Thiết kế và lập trình website với công nghệ HTML5, CSS3, Javascript, Bootstrapt 4, Jquery
Lập trình frontend với reacjs (Full) Lập trình frontend với reacjs (Full)
Viện Công Nghệ Và Đào Tạo Devmaster

DEVMASTER ACADEMY

Địa chỉ: Tầng 6 - Tòa nhà VIỆN CÔNG NGHỆ
Số 25, Vũ Ngọc Phan - Láng Hạ - Đống Đa - Hà Nội

Hotline: 0969 609 003 | 0978 611 889

devmaster.contact@gmail.com

hna.tvchung@gmail.com

CÁC KHÓA HỌC CHUYÊN ĐỀ

  • Thiết kế và lập trình Website PHP, Laravel chuyên nghiệp - FullStack
  • Lập trình ứng dụng trên nền tảng android
  • Lập trình Ứng dụng với Công nghệ ASP.NET Core MVC, WebAPI, ReactJS - FullStack
  • Lập trình ứng dụng với WINDOWS FORM
  • Lập trình ứng dụng với JAVA (FORM)
  • Thiết kế và lập trình Ứng dụng với công nghệ Java (Java Framework springBoot, hibernate,...) - FullStack
  • Thiết kế và lập trình website với công nghệ HTML5, CSS3, Javascript, Bootstrapt 4, Jquery
  • Lập trình frontend với reacjs (Full)
Viện Công Nghệ Và Đào Tạo Devmaster

VIỆN CÔNG NGHỆ VÀ ĐÀO TẠO DEVMASTER - Học thực tế * Làm thực tế * Cam kết việc làm
Copyright by Ⓒ DEVMASTER 2015